IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构线性表之双向循环链表结构代码及其部分功能实现 -> 正文阅读

[数据结构与算法]数据结构线性表之双向循环链表结构代码及其部分功能实现

package 线性表双向循环链表结构及其功能实现;
/*优化了下 插入方法,选择的应该是第几个空位插入,双向循环链表,能够正逆两个方向显示数据
*
*
*
*
*
*
*/
public class DoubleCircularLinkedList {
class ListNode {
int data;
ListNode prev;//指向前驱
ListNode next;//指向后继
public ListNode(int data) {
this.data = data;
}
}

	ListNode head;
	ListNode tail;
	int size = 0;

	DoubleCircularLinkedList() {
		head = null;// (头指针)指向第一个元素的地址
		tail = null;// (尾指针)//指向最后一个元素的地址
	}

	// 添加元素(尾插法)
	public void append(int data) {
		ListNode newNode = new ListNode(data);
		if (tail == null) {
			head = newNode;
			newNode.next = head;
			tail = newNode;
			size++;
		} else {
			tail.next = newNode;
			newNode.prev=tail;
			tail = newNode;
			newNode.next = head;
			size++;
		}
	}

	// 正序遍历并显示
	public void display1() {
		ListNode p = head;
		while (p.next != head) {
			System.out.print(p.data + " ");
			p = p.next;
		}
		System.out.print(p.data);
		System.out.println();

	}
	//逆序遍历并显示
	public void display2() {
		ListNode p=tail;
		while(p!=head) {
			System.out.print(p.data + " ");
			p=p.prev;
		}
		System.out.print(p.data);
		System.out.println();
	}

	public static void main(String args[]) {
		DoubleCircularLinkedList newlist = new DoubleCircularLinkedList();
		newlist.append(1);
		newlist.append(2);
		newlist.append(5);
		newlist.append(3);
		newlist.insert(1, 6);
		
		newlist.display1();
		newlist.delete(2);
		newlist.display2();
	}

	// 插入元素
	public void insert(int position, int num) {
		ListNode p = new ListNode(num);
		if (position > size) {// 1 越界
			System.out.println("超出链表长度,无效");
		} else if (position <= size-1) {// 2 中间插入
			ListNode now = head;
			for (int i = 1; i < position; i++) {// 找到插入空位的前一个元素位置
				now = now.next;
			}
			now.next.prev=p;
			p.next=now.next;
			p.prev=now;
			now.next=p;
			size++;
		}
	}

	// 删除元素
	public void delete(int position) {
		if (position > size) {// 1 越界
			System.out.println("超出链表长度,无效");
		} else if (position == 1) {
			head.next=null;
			head=head.next;
			head.prev=null;
			tail.next=head;
			size--;
		} else if (position == size) {
			ListNode now = tail.prev;
			tail.next=null;
			tail.prev=null;
			tail=now;
			now.next=head;
			size--;
		}
		else {
			ListNode pre = head;//删除结点的前一个
			ListNode cur;//删除结点的后一个
			for (int i = 1; i < position - 1; i++) {//删除元素的前一个
				pre = pre.next;
			}
			cur=pre.next.next;//删除结点的后一个
			pre.next=cur;
			cur.prev=pre;
			size--;
		}
	}
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:53:53  更:2021-07-29 11:54:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/6 12:26:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码