3.1、双向循环链表(java实现)
1、创建节点类
public class CNode<T> {
public CNode prev;
public CNode next;
public T data; public CNode() {
} public CNode(T data) {
this.data = data;
}
}
2、实现类
public class DoubleLinkNode<T> { /**
* 初始化
*
* @param head
*/
public void init(CNode head) {
head.prev = head;
head.next = head;
} /**
* 插入
*
* @param head:插入对应链表
* @param index:插入的位置
* @param element: 对应位置插入的元素
*/
public void insert(CNode head, int index, T element) {
CNode temp = head;
CNode<T> newnode = new CNode<>(element);
int j = -1;
while (temp.next != head && j < index - 1) {
temp = temp.next;
j++;
} if (j != index - 1) {
System.out.println("插入的下标有问题");
return;
}
newnode.next = temp.next;//---->
temp.next.prev = newnode;//<----
newnode.prev = temp;//---->
temp.next = newnode;//<---
} /**
* 删除
* @param head:所要删除的链表
* @param index :删除的元素下标
*/
public void delete(CNode head, int index) {
CNode temp = head;
int j = -1;
if (temp.next == head) {
System.out.println("链表为空,没有元素可删除");
return;
}
while (temp.next.next != head && j < index - 1) {
temp = temp.next;
j++;
} if (j != index - 1) {
System.out.println("删除元素位置下标出错");
return;
}
temp.next = temp.next.next;
temp = temp.next.next.prev;
} public void indexGetElement(CNode head,int index) {
CNode temp = head;
int j = -1;
if (temp.next == head){
System.out.println("为空,无法获取你要的值");
return;
}
while (temp.next != head && j< index){
temp = temp.next;
j++;
}
if (j != index){
System.out.println("您给的下标有问题");
return;
}
System.out.println("您要获取的值:"+temp.data);
} /**
* 求当前元素个数
*
* @param head
*/
public void getLength(CNode head) {
CNode temp = head;
int length = 0;
if (temp.next == head) {
System.out.println("链表为空,长度为0");
return;
}
while (temp.next != head) {
temp = temp.next;
length++;
}
System.out.println("长度为: " + length);
} /**
* 打印
*
* @param head
*/
public void print(CNode head) {
CNode temp = head;
if (temp.next == head) {
System.out.println("链表为空,没有可打印元素");
return;
}
while (temp.next != head) {
temp = temp.next;
System.out.print(temp.data + " ");
}
System.out.println();
} public static void main(String[] args) {
CNode<Integer> cNode = new CNode<>();
DoubleLinkNode doubleLinkNode = new DoubleLinkNode();
doubleLinkNode.init(cNode);
doubleLinkNode.indexGetElement(cNode,0); doubleLinkNode.insert(cNode, 0, 8);
doubleLinkNode.insert(cNode, 0, 7);
doubleLinkNode.getLength(cNode);
doubleLinkNode.print(cNode);
for (int i = 0; i < 5; i++) {
doubleLinkNode.insert(cNode, i, i);
} doubleLinkNode.print(cNode);
doubleLinkNode.getLength(cNode); doubleLinkNode.delete(cNode,6);
doubleLinkNode.print(cNode);
doubleLinkNode.getLength(cNode); doubleLinkNode.indexGetElement(cNode,5);
}
}
3、实验结果
为空,无法获取你要的值
长度为: 2
7 8
0 1 2 3 4 7 8
长度为: 7
0 1 2 3 4 7
长度为: 6
您要获取的值:7
3.1、双向循环链表(java实现)的更多相关文章
- java与数据结构(4)---java实现双向循环链表
线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...
- 双向循环链表的Java版本实现
1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...
- java实现双向循环链表
java实现循环链表:http://www.cnblogs.com/lixiaolun/p/4643911.html 在单链表中,查询下一个元素的时间是O(1).查询上一个元素的时间却是O(n). 为 ...
- (java实现)双向循环链表
什么是双向循环链表 在了解双向循环链表之前,如果对链表还没有一个清晰的概念,建议你看看单链表和单向循环链表,这有利于你更好的理解下面的内容.(废话有点多[逃] 相比单链表,双向循环链表是一个更加复杂的 ...
- Java 用双向循环链表实现 遍历
package day2; /** * 构建双向循环链表,实现遍历功能 */public class DoubleLB { public static void main(String[] args) ...
- java数据结构-06双向循环链表
双向循环链表跟单向链表一样,都是头尾相连,不过单向是尾指向头,双向是头尾互相指,可以从前往后查,也可以从后往前查 无头结点的双向循环链表 public class CircleLinkedList&l ...
- "《算法导论》之‘线性表’":双向循环链表
本文双链表介绍部分参考自博文数组.单链表和双链表介绍 以及 双向链表的C/C++/Java实现. 1 双链表介绍 双向链表(双链表)是链表的一种.和单链表一样,双链表也是由节点组成,它的每个数据结点中 ...
- 双向链表、双向循环链表的JS实现
关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法: 单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...
- C语言通用双向循环链表操作函数集
说明 相比Linux内核链表宿主结构可有多个链表结构的优点,本函数集侧重封装性和易用性,而灵活性和效率有所降低. 可基于该函数集方便地构造栈或队列集. 本函数集暂未考虑并发保护. 一 ...
- c语言编程之双向循环链表
双向循环链表就是形成两个环,注意每个环的首尾相连基本就可以了. 程序中采用尾插法进行添加节点. #include<stdio.h> #include<stdlib.h> #de ...
随机推荐
- 发布一个自己的jar包给全球人使用
目录 项目准备 sonatype 注册 申请sonatype工单 gpg配置 项目配置 依赖oss-parent 自定义配置 pom配置 全局settings配置 发布 验证 maven 项目对于我们 ...
- Eureka 缓存结构以及服务感知优化
目录 Eureka-Client获取注册信息 Eureka-Server管理注册信息 服务感知优化 果然好记性不如烂笔头,再简单的东西不记录下来总是会忘的! 本文首先会分析eureka中的缓存架构.并 ...
- spring-boot-plus快速快发脚手架简介
Everyone can develop projects independently, quickly and efficiently! Introduction spring-boot-plus是 ...
- docker学习1:docker前世今生
Docker简介 Docker是2013发起的一个项目,早在2013年,Docker自诞生起,就是整个技术界的明星项目,当时我还在上海实习,就在各种技术媒体上看到了Docker的介绍文章,很多技术媒体 ...
- 在Keras中使用VGG进行物体识别(直接使用)
https://blog.csdn.net/baimafujinji/article/details/80700263
- Python 创建目录 and 删除目录
import os import shutil #删除并创建目录 def rmdir(path): try: shutil.rmtree(path) print(path+':删除成功') os.ma ...
- java.lang.Thread类详解
java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...
- 【Leetcode】【简单】【217. 存在重复元素】【JavaScript】
题目描述 217. 存在重复元素 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: 输入: [ ...
- electron-vue-webpack引入bootstrap多实例问题Multiple instances of Vue detected!
在node modules里面找到electron-webpack目录, 修改out->main.js白名单内容,增加 whiteListedModules.add("bootstra ...
- fiddler的安装于使用(一)安装fiddler
Fiddler的简介 Fiddler是位于客户端和服务器端之间的代理,也是目前最常用的抓包工具之一 .它能够记录客户端和服务器之间的所有 请求,可以针对特定的请求,分析请求数据.设置断点.调试web应 ...