链表
在链表中,逻辑顺序是通过指针实现的。
链表中第一个结点称为根节点,最后一个结点称为尾结点。
在单链表中,一个结点(链表是由一系列的结点组成的)有一个指向下一节点的指针(尾结点除外)。
在双链表中,一个结点有两个指针,一个指向上一节点,一个指向下一节点(首尾结点只有一个指针,另一指针指向为null)。
在循环链表中,根尾结点也都有两个指针,比双链表多出来的那个指针使得根节点的上一节点是尾结点,也使得尾结点的下一结点是根节点,这样整串链表组成了一个首尾相连的环形。
链表由一个个的结点组成,结点在内存中开辟的空间又分为两部分,一部分用来存储数据(数据域),另一部分用来存储指针(引用域)。(在单链表中,尾结点的指针指向null)
创建一个链表的流程如下:
创建Node 结点类
/**定义一个节点类 * @param args */ public class Node { private Object ob;//存储内容 private Node next;//下一个结点 private Node pre;//上一个结点 /* * 定义为结点添加数据对象的方法 */ public void add(Object ob){ this.ob=ob; } /* * 定义得到数据对象的方法 */ public Object getob(){ return ob; } /* * 定义得到下一个结点的方法 */ public Node getNext() { return next; } /* * 定义添加下一个结点的方法 */ public void setNext(Node next) { this.next = next; } /* * 定义得到上一个结点的方法 */ public Node getPre() { return pre; } /* * 定义添加上一个结点的方法 */ public void setPre(Node pre) { this.pre = pre; } }
在创建一个链表类chain
public class Chain { private Node root;//根结点 private Node tail;//尾结点 private int size=0;//链表中结点个数 /* * 定义添加结点的方法 */ public void add(Object ob){ Node node=new Node(); node.add(ob); if(getsize()==0){ root=node; tail=root; tail.setPre(null); } else{ tail.setNext(node); node.setPre(tail); tail=node; } size++; } /* * 定义删除结点的方法,根据索引数 */ public void delete(int index){ Node temp=root; if(index<0||index>=size){ System.out.println("索引越界!"); } else{ if(index==0){ root=temp.getNext(); } else{ if(index==size-1){ tail=tail.getPre(); } else{ //temp 是要被删除的那个结点 temp=getnode(index); //找到temp的前一个结点 Node fnode=temp.getPre(); System.out.println("dddd"+ fnode.getob()); //找到temp的后一个结点 Node nnode=temp.getNext(); //让前一个和后一个结点双向联系 fnode.setNext(nnode); nnode.setPre(fnode); // System.out.println(temp.getob()+".."); } } size--; } } /* * 定义得到结点的方法 */ public Node getnode(int index){ Node gnode=root; if(index<size&&index>=0){ if(index==0){ gnode=root; } else{ for(int i=0;i<index;i++){ gnode=gnode.getNext(); } } return gnode; } else return null; } /* * 定义得到链表结点数量size的方法 */ public int getsize(){ return size; } }
使用队列和链表可以很方便的添加新内容或者删除内容,可以对数量较大的信息进行简单编辑。
相关推荐
数据链表是一种重要的数据结构,尤其在处理动态数据和高效遍历方面表现出色。在计算机科学中,数据链表与数组不同,它不依赖于内存中的连续空间来存储元素,而是通过节点之间的引用或指针连接各个元素。这种灵活性...
在这个“mp3歌词解析项目”中,我们将深入探讨如何使用数据链表来解析和管理这些LRC歌词。 首先,让我们理解什么是数据链表。数据链表是一种线性数据结构,与数组不同,它不连续存储元素。每个元素称为节点,每个...
链表是一种重要的数据结构,它在计算机科学中扮演着至关重要的角色,特别是在处理动态数据集合时。相较于数组,链表不需预先分配连续的内存空间,因此在插入和删除操作上具有更高的灵活性。本主题主要关注C#语言中的...
数据链表排序
链表作为一种基础且重要的数据结构,在计算机科学中扮演着至关重要的角色。相比于数组,链表在内存管理和操作灵活性上有着独特的优势。本篇文章将详细探讨《数据结构》中链表的插入和删除操作,旨在帮助学习者深入...
数据链表是计算机科学中数据结构的一个重要组成部分,它在编程中扮演着不可或缺的角色。本压缩包中的"数据链表演示程序"是一个基于VC++ 6.0开发的DOS界面应用,旨在帮助用户理解并可视化数据链表的工作原理。通过这...
链表是一种常用的数据结构,它在计算机科学中扮演着重要的角色。相较于数组,链表的主要优点在于其动态性,能够方便地进行插入和删除操作,而不需要像数组那样移动大量元素。在这个“链表类”中,我们关注的是如何...
动态链表数据库是一种数据结构,它在内存中以节点的形式存储数据,并通过指针将这些节点连接起来,形成一个线性的序列。在这个“动态链表数据库”项目中,开发者实现了一个跨平台的解决方案,能够运行在Windows(win...
当新的数据进入时,如果当前热数据链表已满,那么需要淘汰最不常使用的热数据,将其移入冷数据链表。若该数据原本就在冷数据链表中,则直接更新其访问状态即可。 此外,优化后的LRU链表可能还会引入预热机制,即在...
链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态数据集合时。链表与数组不同,它不依赖于物理存储位置的连续性,而是通过节点之间的引用(或称为指针)来组织数据。在本案例中,...
链表是一种常见且重要的数据结构,特别是在处理动态数据集合时。在这个问题中,我们关注的是链表的合并,这是一个常见的操作,特别是在处理排序链表时。我们将深入探讨如何使用C++来实现两个链表的合并。 链表由一...
城市链表是一种特殊的数据结构,它在数据存储和处理中起着至关重要的作用。在这个练习中,我们将使用链表来管理一系列城市的信息,每个信息包括城市名和位置坐标。链表是计算机科学中的一种基本数据结构,它不同于...
链表是一种重要的数据结构,在计算机科学中被广泛用于组织和管理数据。在C#编程语言中,链表提供了高效的数据操作方式,特别是在处理大量数据时,它的灵活性和动态性使得在内存管理上具有显著优势。本篇文章将深入...
本文将深入探讨C++中的三种关键链表数据结构:单链表、循环链表和双向链表,以及如何通过面向对象编程来实现它们。 1. **单链表**: 单链表是最基础的链式数据结构,每个节点包含一个数据元素和一个指向下一个节点...
数据结构链表的课程设计 本资源是关于数据结构链表的课程设计,包括了链表的程序源代码。下面是对标题、描述、标签和部分内容的详细解释: 标题:数据结构链表的课程设计 这个标题表明了该资源的主要内容是关于...
在C++中,链表是一种常见的数据结构,它不同于数组,不需要连续的内存空间来存储元素。本项目专注于C++实现的单链表,提供了一个完整的可运行示例,包括`main.cpp`主程序,以及`linklist.h`和`node.h`两个头文件,...
本文将深入探讨一种特殊的数据结构表示——三叉链表表示的二叉树。这种表示方式在C++语言中尤为常见,它允许我们高效地创建、插入、删除节点以及进行循环算法遍历二叉树。 首先,我们要理解什么是二叉树。二叉树是...
双向链表是数据结构中的一种,尤其在处理需要前后移动元素的问题时,它的优势尤为突出。本篇文章将详细探讨双向链表的基本概念、结构以及实现,旨在帮助初学者理解并掌握这一重要知识点。 双向链表是一种线性数据...