Java数据结构——循环链表的实现
//单链表结点类
public class Node<T> { //单链表结点类,T指定结点的元素类型 public T data; //数据域,保存数据元素
public Node<T> next; //地址域,后任结点引用 //构造结点,data指定数据元素,next指定后继结点
public Node(T data, Node<T> next) {
this.data = data;
this.next = next;
} public Node() {
this(null, null);
} //返回结点对应的字符串
public String toString() {
return this.data.toString();
} //比较两个结点值是否相等,覆盖Object类的equals(obj)方法
public boolean equals(Object obj) {
return obj == this || obj instanceof Node && this.data.equals(((Node<T>) obj).data);
}
}
//循环单链表类,实现线性表接口
public class LoopLinkList<T> { //头指针,指向循环单链表的头结点
public Node<T> head; //默认构造方法,构造空循环单链表
public LoopLinkList() {
this.head = new Node<T>();
this.head.next = this.head; ////创建头结点
} //判断循环单链表是否空
public boolean isEmpty() {
return this.head.next == this.head;
} //由element数组中的多个对象构造单链表。采用尾插入构造单链表
public LoopLinkList(T[] element) {
this(); //创建空单链表,只有头结点
Node<T> rear = this.head; //rear指向单链表最后一个结点
for (int i = 0; i < element.length; i++) { //若element==null,抛出空对象异常
//若element.length==0,构造空链表
rear.next = new Node<T>(element[i], this.head); //尾插入,创建结点链入rear结点之后
rear = rear.next; //rear指向新的链尾结点
}
} //返回循环单链表长度,单链表遍历算法,O(n)
public int length() {
int i = 0;
for (Node<T> p = this.head.next; p != this.head; p = p.next)
i++;
return i;
} //返回第i(≥0)个元素,若i<0或大于表长则返回null,O(n)
public T get(int i) {
if (i >= 0) {
Node<T> p = this.head.next;
for (int j = 0; p != this.head && j < i; j++)
p = p.next;
if (p != this.head)
return p.data; //p指向第i个结点
}
return null; //当i<0或大于表长时
} //设置第i(≥0)个元素值为x。若i<0或大于表长则抛出序号越界异常;若x==null,不操作。O(n)
public void set(int i, T x) {
if (x == null) return; //不能设置空对象
Node<T> p = this.head.next;
for (int j = 0; p != this.head && j < i; j++)
p = p.next;
if (i >= 0 && p != this.head)
p.data = x; //p指向第i个结点
else throw new IndexOutOfBoundsException(i + ""); //抛出序号越界异常
}
}
public static void main(String args[]){
Integer[] array=new Integer[]{12,25,55,78,99,-17};
LoopLinkList<Integer> linkList =new LoopLinkList<Integer>(array);
int length=linkList.length();
int a=linkList.get(5);
System.out.println("链表是否为空:"+linkList.isEmpty());
System.out.println("链表长度是:"+length);
System.out.println("获取指定位置的数据是:"+a);
for(int i=0;i<length;i++)
System.out.println(linkList.get(i));
linkList.set(1,200);
for(int i=0;i<length;i++)
System.out.println(linkList.get(i));
}
Java数据结构——循环链表的实现的更多相关文章
- Java数据结构——循环链表
一.单向循环链表表中的最后一个节点的指针域指向头结点,整个链表形成一个环.其他的与单链表相同. (以下图片均来自网络,侵删) 插入操作 删除操作 简单实现 public class CiNode { ...
- java与数据结构(3)---java实现循环链表
循环链表:将单链表中尾结点的指针由空指针改为指向头结点,就使整个单链表形成一个环,这种首尾相接的单链表称为单链表循环表,即循环链表. 循环链表与单链表最重要的区别是:尾结点的指针,不再是p->n ...
- Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用
Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...
- Java数据结构之线性表(2)
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构之线性表
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
- Java数据结构和算法(一)线性结构
Java数据结构和算法(一)线性结构 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 线性表 是一种逻辑结构,相同数据类型的 ...
- JAVA数据结构系列 栈
java数据结构系列之栈 手写栈 1.利用链表做出栈,因为栈的特殊,插入删除操作都是在栈顶进行,链表不用担心栈的长度,所以链表再合适不过了,非常好用,不过它在插入和删除元素的时候,速度比数组栈慢,因为 ...
- Java数据结构之树和二叉树(2)
从这里始将要继续进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来 ...
- Java数据结构之树和二叉树
从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ Java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...
随机推荐
- (转)session、cookie与“记住我的登录状态”的功能的实现
Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...
- hdu 1086:You can Solve a Geometry Problem too(计算几何,判断两线段相交,水题)
You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3 ...
- linux配置防火墙打开3306端口
安装完MYSQL服务器后在本机所有操作都正常, 但在其它机器上远程访问这个MYSQL服务器时怎么都连接不上. shit! 怀疑是端口问题, 结果: telnet 192.168.1.245 33 ...
- hdu 3599(最短路+最大流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3599 思路:首先spfa求一下最短路,然后对于满足最短路上的边(dist[v]==dist[u]+w) ...
- 编程之美 set 20 构造数独
1. 朴素 DFS 遍历效率太低, 即便是预先设定 9 个数放到数组再去 DFS, 同样并不高效 2. 在生成一个可行解后, 随机删除一些数字, 删除的数字越多, 数独的难度就越大 3. 正解二. 3 ...
- 'not all arguments converted during string formatting'错误告警信息解决办法
问题描述:
- js 操作对象的引用和操作实际对象的区分
JavaScript高级程序设计-第3版-中 有这么一段话: 在操作对象时,实际上是在操作对象的引用而不是实际的对象.为此,引用类型的值是按引用访问的①. ① 这种说法不严密,当复制保存着对象的某个变 ...
- ggplot2画图小试
# 注意aes(x=wt, y=mpg)中的wt不是字符"wt",因此它是属性字段名(例如,EXCel中字段名有Student,那就是Student,而不是"Studen ...
- XML External Entity attack
解析外部xml给本地带来的安全隐患. https://en.wikipedia.org/wiki/XML_external_entity_attack An XML External Entity ( ...
- python celery rabbitmq--- pypi image from ustc
https://lug.ustc.edu.cn/wiki/mirrors/help/pypi 那么为啥要用celery ?(http://xiaorui.cc/2014/11/16/celery-ra ...