链表 小结
一 .介绍
链表与集合框架里的队列以及数组不同,它是一种非连续 ,非顺序的存储结构,而且其储存的数据元素是通过链表中的引用链接次序实现的.链表是由一系列结点组成的,结点的生成与队列相同,可以在运行时动态生成.
每个结点包括两个部分:一个是储存数据元素的数据域;另一部分则是用来储存下一个结点地址的指针域.正因为如此,链表在数据元素的插入和删除方面相当有优势.
二.分类及使用
链表主要分为三类:单链表,双链表,和环链表,每种适用于不同的情况.
三者的操作方式相同,主要包括:链表的创建,指定元素的添加,修改,删除,以及查找,以上的操作可以通过具体指定元素对象或者是对应的索引进行,大致上看链表的操作与集合框架的极为相似.
下面通过对双链的操作介绍几种基本的操作方式:
1.指定元素的添加:
public void add(int index, Object object) {
// 创建对应元素的结点
LinkNode temp = new LinkNode(object);
// 判断是否索引越界
if (index > getSize() || index < 0) {
// 抛出运行时错误
throw new RuntimeException("索引越界" + "size:" + getSize()
+ "; index:" + index);
} else if (head == null) {
head = temp;
foot = head;
} else if (index == getSize()) {
// 如果所需添加的对象到链表最后
foot.setChildren(temp);
temp.setParent(foot);
foot = temp;
} else if (index == 0) {
// 如果所需添加的对象到链表最前
temp.setChildren(temp);
head.setParent(temp);
head = temp;
} else {
// 获取插入位置的父节点和字节点
LinkNode node = get(index);
LinkNode fnode = node.getParent();
// 重新设定关系
temp.setParent(fnode);
fnode.setChildren(temp);
temp.setChildren(node);
node.setParent(temp);
}
}
2. 打印链表中所有元素
public void printLinkList() {
// 递归算法
// if (root != null) { Object date = root.getObj();
// System.out.println(date); LinkNode temp = root.getNext();
// printLinkList(temp); }
// 循环输出
LinkNode node = head;
while (node != null) {
System.out.println(node.getObj());
node = node.getChildren();
}
}
3.获得 指定元素在链表中的索引
public int contain(LinkNode node) {
int index = 0;
LinkNode temp = head;// 获得链表头
while (temp != null) {// 判断是否为空
if (temp.getObj().equals(node.getObj())) {// 判断是否相等
return index;// 返回索引
} else {
index++;
temp = temp.getChildren();
}
}
return -1;// 没找到则返回-1
}
分享到:
相关推荐
数据结构Java线性表顺序表与链表小结PPT学习教案.pptx
c语言链表数组-c语言手写单链表实现,数组和链表结构对比小结和个人理解 数组和链表.pdf
java 链表心得,对于感到困难的朋友会有很大帮助,与其他语言互通
本篇文章主要介绍了Linux 内核通用链表学习小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
大学期间用C语言链表实现的一个图书管理系统,主要功能有 a. 设备申请。由专业人员填写“申请表”送交领导批准购买。 b. 设备入库。新设备购入后要立即进行设备登记(包括类别、设备名、型号、规格、单价、数量、...
C语言学习,链表操作小结! 写更多的代码,用链表、用链表! 不过瘾!
数据结构实验报告-利用链表实现简易学生信息管理系统,内容包含实验目的,实验环境,实验源代码,实验运行截图,实验小结等。 说明:如有bug,还请反馈!
运用链表实现图书信息的管理,主要包含图书信息的增删改查,以及将链表中存储的图书信息保存为txt文件,属于C语言入门级练手小项目,可以作为C语言结课大作业的参考。比较适合刚学C语言编程的大学生。该源码在VS2017...
实验九 结构体数据类型和链表实验目的了解结构体的概念,理解结构体类型和结构体类型变量。实验小结在结构说明语句中,关键字struct引入结构体类型的定义,stud
主要介绍了Python实现队列的方法,结合实例形式分析了Python基于数组和链表实现队列的相关操作技巧与相关注意事项,需要的朋友可以参考下
要求报告包括:实验步骤、算法思路、分析、 源程序、运行结果截图、实验小结等内容。 实验题目: 1、《数据结构》教材(红色封面)P53-56“数值转换问题”;(必做) 2、《数据结构》教材(红色封面)P56-61“中缀...
小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程...
小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程作业 第3章 ...
1.4小结 第2章数组 2.1数组 2.2Delphi中的数组类型 2.3TList类和指针数组 2.4磁盘数组 2.5小结 第3章链表、栈和队列 3.1单链表 3.2双向链表 3.3链表的优缺点 3.4栈 3.5队列 3.6小结 .第4章查找 4.1比较...
1.4小结 第2章数组 2.1数组 2.2Delphi中的数组类型 2.3TList类和指针数组 2.4磁盘数组 2.5小结 第3章链表、栈和队列 3.1单链表 3.2双向链表 3.3链表的优缺点 3.4栈 3.5队列 3.6小结 .第4章查找 4.1比较...
小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验 编程...
算法总结,txt格式。 可供收藏 涉及队列、链表、堆栈、图、树等等...
1.7 小结 1.8 复习题 1.9 编程练习 第2章 C的数据类型 2.1 枚举类型 2.2 数据和内存 2.3 指针 2.4 数组 2.5 指针和数组 2.6 记录 2.7 动态分配 2.8 小结 2.9 复习题 2.10 编程练习 第...