1、链表的构成:包括节点类(Node)、根节点(root)、末节点(tail)、其中节点类包括data和next两个属性。
2、链表内部的一些构造方法和方法:添加(add)、得到长度(size)、得到指定位置的储存内容(get)、移除(remove)和插入(insert)。
3、链表的作用:个人对链表还不是很熟悉,但是感觉它有一个突破点——那就是它把原来动态分配的空间连接在了一起,方便了管理。而且他的大小是随意改变的,不像数组之类的在初始化时就已经确定了大小。
4、图示解说:
public class LHWLink { //定义一个根节点 private Node root; //定义一个末尾的节点 private Node last; //定义一个长度 private int size; //定义一个添加的方法 public void add(Object ob){ //定义一个新节点 Node node = new Node(); node.data = ob; if(root == null){ root = node; last = node; }else{ last.next = node; last = node; } size++; } //定义一个的得到长度的方法 public int size(){ return size; } //定义一个得到的方法 public Object get(int index){ if(index<0 || index>size-1){ //抛出一个异常 throw new java.lang.ArrayIndexOutOfBoundsException("超出范围"); }else{ Node temp = root; if(index == 0){ return root.data; } for(int i=0;i<index;i++){ temp = temp.next; } return temp.data; } } //定义一个删除的方法 public Object remove(int index){ if(index<0 || index>size-1){ //抛出一个异常 throw new java.lang.ArrayIndexOutOfBoundsException("超出范围"); }else{ if(size == 1){ size--; Object obj = root.data; root = null; return obj; } size--; if(index == 0){ Object obj = root.data; root = root.next; return obj; } Node temp = root; for(int i=0;i<index-1;i++){ temp = temp.next; } Object dele_data = temp.next.data; temp.next = temp.next.next; if(index == size){ last = temp; } return dele_data; } } //定义一个插入的方法 public void insert(Object obj, int index){ if(index<0 || index>size-1){ //抛出一个异常 throw new java.lang.ArrayIndexOutOfBoundsException("超出范围!"); }else{ Node temp = root; Node node = new Node(); node.data = obj; if(index == 0){ node.next = root; root = node; size++; return; } for(int i=0;i<index-1;i++){ temp = temp.next; } node.next = temp.next; temp.next = node; size++; } } }节点类
public class Node { public Node next; public Object data; // public Node front;(如果要建立双向链表) }
相关推荐
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语言中的数据结构概念。数据结构是计算机科学的核心组成部分,它涉及到如何有效地组织和管理数据,以便于高效地访问和操作。 首先,我们要...
### 小结 通过本实验,学生不仅能够深入了解链表这一重要数据结构的特点,还能掌握如何利用 C 语言进行高效的数据处理。此外,通过实际编程操作,学生可以进一步提升自己的编程能力和解决问题的能力。这对于后续...
- 链表实现通常比列表实现占用更多的内存空间,因为链表需要额外的空间存储指针。 3. **异常处理**: - 在实现队列时,需要考虑到队列为空时的操作,避免程序崩溃或产生错误。 #### 五、总结 通过上述介绍,...
### 小结 理解并掌握双向链表的设计和实现,以及如何在实际项目中运用,对于提升编程能力尤其是处理动态数据集合的问题至关重要。双向链表的灵活性使得它在需要频繁进行插入和删除操作的场景中特别有用,而其双指针...
运用链表实现图书信息的管理,主要包含图书信息的增删改查,以及将链表中存储的图书信息保存为txt文件,属于C语言入门级练手小项目,可以作为C语言结课大作业的参考。比较适合刚学C语言编程的大学生。该源码在VS2017...
五、实践小结 通过这次设计,学生不仅巩固了C语言的基础知识,如函数、循环,还初次接触并理解了链表这一重要数据结构。同时,体验了实际编程过程中的问题解决和团队协作,认识到持续练习和调试的重要性。 六、源...
### Java集合小结 #### 一、集合的概念与重要性 集合是Java编程语言中用于存储、管理和操作数据的一种重要工具。它提供了多种数据结构来适应不同的应用场景,从而有效地提高程序开发效率。从数据结构的角度来看,...