链表 小结
一 .介绍
链表与集合框架里的队列以及数组不同,它是一种非连续 ,非顺序的存储结构,而且其储存的数据元素是通过链表中的引用链接次序实现的.链表是由一系列结点组成的,结点的生成与队列相同,可以在运行时动态生成.
每个结点包括两个部分:一个是储存数据元素的数据域;另一部分则是用来储存下一个结点地址的指针域.正因为如此,链表在数据元素的插入和删除方面相当有优势.
二.分类及使用
链表主要分为三类:单链表,双链表,和环链表,每种适用于不同的情况.
三者的操作方式相同,主要包括:链表的创建,指定元素的添加,修改,删除,以及查找,以上的操作可以通过具体指定元素对象或者是对应的索引进行,大致上看链表的操作与集合框架的极为相似.
下面通过对双链的操作介绍几种基本的操作方式:
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中的线性表是数据结构的一种基本形式,主要包括顺序表和链表两种主要类型。 顺序表是一种物理存储单元上顺序存放的线性表,其特点是元素之间的逻辑顺序与物理顺序一致。在Java中,`java.util.ArrayList`是顺序...
最后,虚拟内存IV:动态内存分配-高级概念还讨论了LIFO策略的回收策略和显式链表小结。LIFO策略的回收策略是将新释放的块放置在链表的开始处。显式链表小结则是与隐式链表相比较,显式链表需要存储前/后指针,而隐式...
Java链表是编程中一种基础且重要的数据结构,它在许多场景下有着广泛的应用。本文将结合个人学习心得,深入探讨Java链表的核心概念、实现方式以及与其他编程语言的互通性。 首先,链表是一种线性数据结构,与数组...
"C语言链表数组" 在学习编程语言时,大家常常遇到数组和链表这两种数据结构。今天,我们将深入探讨C语言中链表数组的实现和数组与链表结构的对比,并结合个人理解和实践经验来分析它们的优缺。 一、链表数组的实现...
解决这个问题的关键在于比较两个链表的头节点,并将较小的节点添加到结果链表中。然后,移动指向较小节点的指针,继续比较下一个节点,直到其中一个链表为空。此时,将非空链表的所有剩余节点添加到结果链表中。 ...
#### 小结 本文档介绍了双向链表的实现方法及其基本操作的C语言实现。双向链表相比于单链表具有更高的灵活性和效率,尤其是在需要频繁地从前向后或从后向前遍历链表的情况下。通过这些基本操作,可以实现对双向链表...
Linux内核通用链表是操作系统内核中一种高效的数据结构,用于存储和管理动态数据集。本文将深入探讨Linux内核通用链表的原理、结构、宏定义以及使用方法。 首先,内核提供的通用链表库是双向链表,这意味着每个链表...
大学期间用C语言链表实现的一个图书管理系统,主要功能有 a. 设备申请。由专业人员填写“申请表”送交领导批准购买。 b. 设备入库。新设备购入后要立即进行设备登记(包括类别、设备名、型号、规格、单价、数量、...
#### 小结 通过以上分析,我们可以看到使用链表实现栈的Pop和Push操作是相对直观和简单的。在实现过程中需要注意的关键点包括: 1. 确保栈顶指针始终指向最新的栈顶节点。 2. 在进行出栈操作时,正确处理空栈的情况...
主要内容包括实验目的、实验环境配置、具体实现的源代码、实验运行截图以及最后的小结。以下是针对该实验报告中的各个知识点进行的详细解析。 #### 实验目的 1. **理解链表的基本概念**:链表是一种常见的线性表...
数据结构课程设计之二叉树采用二叉链表作为存储结构 本课程设计的主要任务是设计并实现一个二叉树的存储结构,使用二叉链表作为存储结构,并实现按层次顺序遍历二叉树的算法。下面是本设计的详细解释和实现过程: ...
### 小结 本代码示例不仅涵盖了链表的基本定义与创建,还提供了更高级的操作,如集合运算等。这些操作在实际编程中非常有用,可以帮助我们更好地理解和应用链表这一数据结构。通过学习这段代码,读者可以进一步掌握...
"C语言数据结构的小结"是一个针对初学者的指南,旨在帮助他们理解并掌握C语言中的数据结构概念。数据结构是计算机科学的核心组成部分,它涉及到如何有效地组织和管理数据,以便于高效地访问和操作。 首先,我们要...
1.9 实验小结 6 2 增加站点,删除 7 2.1 需求分析 7 2.2 总体设计 7 2.3 数据结构 8 2.4 算法设计 9 2.5 系统实现 12 2.6 系统测试 12 2.7 复杂度分析 13 2.8 结果分析 13 2.9实验小结 13 3 从指定站点出发,计算出...
### 小结 通过本实验,学生不仅能够深入了解链表这一重要数据结构的特点,还能掌握如何利用 C 语言进行高效的数据处理。此外,通过实际编程操作,学生可以进一步提升自己的编程能力和解决问题的能力。这对于后续...
- 链表实现通常比列表实现占用更多的内存空间,因为链表需要额外的空间存储指针。 3. **异常处理**: - 在实现队列时,需要考虑到队列为空时的操作,避免程序崩溃或产生错误。 #### 五、总结 通过上述介绍,...
### 小结 理解并掌握双向链表的设计和实现,以及如何在实际项目中运用,对于提升编程能力尤其是处理动态数据集合的问题至关重要。双向链表的灵活性使得它在需要频繁进行插入和删除操作的场景中特别有用,而其双指针...
运用链表实现图书信息的管理,主要包含图书信息的增删改查,以及将链表中存储的图书信息保存为txt文件,属于C语言入门级练手小项目,可以作为C语言结课大作业的参考。比较适合刚学C语言编程的大学生。该源码在VS2017...
五、实践小结 通过这次设计,学生不仅巩固了C语言的基础知识,如函数、循环,还初次接触并理解了链表这一重要数据结构。同时,体验了实际编程过程中的问题解决和团队协作,认识到持续练习和调试的重要性。 六、源...