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 ...
随机推荐
- HomeKit智能球泡
产品名称: 智能LED灯泡调光调色 接入苹果HomeKit家庭(无需网关).天猫精灵.小爱.小度.Google.ALEXA 产品价格:9.9 本产品是针对HomeKit的产品,没有iphone手机,配 ...
- 【KakaJSON手册】02_JSON转Model_02_数据类型
由于JSON格式的能表达的数据类型是比较有限的,所以服务器返回的JSON数据有时无法自动转换成客户端想要的数据类型. 比如服务器返回的时间可能是个毫秒数1565480696,但客户端想要的是Date类 ...
- 《机器学习基石》---Linear Models for Classification
1 用回归来做分类 到目前为止,我们学习了线性分类,线性回归,逻辑回归这三种模型.以下是它们的pointwise损失函数对比(为了更容易对比,都把它们写作s和y的函数,s是wTx,表示线性打分的分数) ...
- 《统计学习方法》极简笔记P2:感知机数学推导
感知机模型 输入空间是$\chi\subseteq\mathbb{R}^n$,输出空间是$y={+1,-1}$ 感知机定义为:$f(x)=sign(wx+b)$ 感知机学习策略 输入空间任一点$x_0 ...
- Docker入门-docker compose的使用
Compose简介 Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.其代码目前在https://github.com/docker/compose 上开源. ...
- Seq[找规律]----2019 年百度之星·程序设计大赛 - 初赛一:1005
Seq Accepts: 1249 Submissions: 3956 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 ...
- nessus安装
1.安装注册 (1)从https://www.tenable.com/products/nessus/select-your-operating-system上下载对应操作系统版本的nessus,结果 ...
- Python笔记_类
1.类 1.1 类的定义 # 类的定义 class 类名: pass # pass是空语句,不具有任何意义,仅为了保持程序结构完整性 # 创建对象 对象名 = 类名() 1.2 成员变量 # 成员变量 ...
- 随笔编号-06 MYSQL数据库相关知识合集
1 MYSQL取得某一范围随机数: 关键词:RAND() [产生0~1之间的随机数] mysql> SELECT RAND( ), RAND( ), RAND( ); +----------- ...
- eShopOnContainers部署在docker的坑
把eShopOnContainers(.net core 的版本是2.1)下载之后,部署到docker上,查看容器eShopOnContainers的项目都部署上去了. 用http://localho ...