【节点】
数据域(Object对象)
指针域(节点对象)
【链表】
由一个或多个节点组成的一种数据结构,具有散列的存储结构;
【链表的分类】
单向链表、双向链表、循环链表
【数组队列&链表】
数组队列可以实现定位,但每次增减元素都要新创建一个数组;
链表不能定位,查找数据的时候,必须从根节点开始遍历,但链表可以插入和删除任意位置的节点,可以充分利用计算机内存空间;
【节点类】
public class Node { public Object data; public Node next; //构造方法,设置数据域 public Node(Object data){ this.data = data; }
【单向链表的实现】
public class MyLinked { public Node root; public Node rear; int size = 0; //多次用到,定义一个方法 public Node search(int index){ Node tempnode = root; for(int i=0;i<index;i++){ tempnode = tempnode.next; } return tempnode; } //添加节点 ~ public void add(Object data){ //创建一个节点 Node node = new Node(data); //判断加入的为第一个节点 if(root ==null && rear == null){ root = node; rear = node; } //以后的节点 else{ rear.next = node; rear = node;//把新节点赋给根节点 } size++; } //根据索引删除节点,索引从0起 ~ public boolean remove(int index){ //判断是否合法 if(index <0 || index>size-1){ return false; } else { //判断要删除的是否为根节点 // 是 ,删除根节点 if(index == 0){ root= root.next; } //否, else{ //把两个节点串起来 Node tempnode = this.search(index-1);//取出索引节点前一个节点 Node snode = tempnode.next;//保存索引位置节点 tempnode.next =snode.next;//索引位置前一个节点指向索引位置后一个节点 } size--; return true; } } //根据数据删除节点 ~ public boolean remove(Object data){ Boolean flag = false ; for(int i=0;i<size-1;i++){ if(this.get(i)==data){ //把两个节点串起来 Node tempnode = this.search(i-1);//取出目标节点前一个节点 Node snode = tempnode.next;//保存索引位置节点 tempnode.next =snode.next;//索引位置前一个节点指向索引位置后一个节点 size--; flag = true;// 循环里面 要用flag } } return flag; } //在索引前插入节点,参数:索引在前 ~ public boolean insert(int index,Object data){ Node node = new Node(data); //判断索引数值是否合法 if(index <0 || index>size-1){ return false; } else{ //先判断要插入的是否为根节点 //插在根节点前 if(index == 0){ node.next = root; root = node; size++; return true; } else{ Node tempnode = this.search(index-1);//找到索引位置的前一个节点 //把三个节点串起来 Node snode = tempnode.next;//保存索引位置节点 node.next = snode;// 新节点指向索引位置节点 tempnode.next = node;//索引位置前节点指向新节点 size++; return true; } } } //修改节点数据,根据索引 ~ public boolean set(int index,Object data){ if(index <0 || index>size-1){ return false; } else{ Node tempnode = this.search(index);//找到索引位置的节点 tempnode.data = data;//修改索引位置节点的数据域 return true; } } //修改节点数据,根据数据 ~ public boolean set(Object aim,Object data){ Boolean flag = false; //循环 遍历节点 for(int i=0;i<size;i++){ if(this.get(i)==aim){ Node tempnode = this.search(i);//获取目标节点 tempnode.data = data;//直接修改数据域 flag = true; } } return flag; } //获取指定索引数据 ~ public Object get(int index){ if(index <0 || index>size-1){ return false; } else{ Node tempnode = this.search(index); return tempnode.data; } } //获取节点总数 ~ public int size(){ return size; } }
【Tips】
(1)参数中有索引的方法,一定要率先判断索引数是否在合法范围内;
(2)对节点进行插入、删除操作时,要考虑到根节点和其他节点的不同;
(3)多次用到的一段代码,可以把他写成一个函数,直接调用;
//多次用到,定义一个方法 public Node search(int index){ Node tempnode = root; for(int i=0;i<index;i++){ tempnode = tempnode.next; } return tempnode; }
(4)区分数据和节点,打印链表的时候需要返回数据,对节点进行操作寻找目标节点是需要返回节点,而不是具有节点数据的新的节点;
(5)返回值为boolean,是为了在调用函数的时候根据 返回值为true或false来进行对操作是否成功的提示。
相关推荐
数据结构-链表 数据结构是计算机科学和信息技术领域中的一个基础概念,指的是数据在计算机中的组织和存储方式。链表是数据结构中的一种重要类型,广泛应用于计算机科学和信息技术领域。 数据结构可以分为两大类:...
本项目以"用数据结构-链表实现通讯录管理系统"为主题,通过C语言实现了这一功能,旨在帮助用户管理他们的联系人信息。下面我们将深入探讨这个系统所涉及的主要知识点。 首先,我们来了解**链表**这一数据结构。链表...
链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态数据集合时。在本话题中,我们将深入探讨“数据结构-链表逆置算法实现”。链表逆置是指将链表中的元素顺序反转,即原本的第一个...
《C语言数据结构-链表版学生管理系统》 在计算机科学中,数据结构是组织、存储和处理数据的重要工具,而链表作为一种基础且灵活的数据结构,被广泛应用于各种复杂算法和系统设计中。本项目《C语言数据结构-链表版...
数据结构-链表.ppt 头指针、头结点、开始结点的区别、并说明头指针和头结点的作用
数据结构-链表-倒置.eddx
数据结构-链表 JAVA语言实现,包含单向链表、双向链表、循环链表的遍历、删除和插入 详细介绍:http://blog.csdn.net/z740852294/article/details/77369439
链表是一种基础且重要的数据结构,它在计算机科学和编程中扮演着不可或缺的角色。相比于数组,链表在处理动态数据集合时提供了更大的灵活性。在这个"数据结构-链表相关功能和算法"的主题中,我们将深入探讨链表的...
数据结构 -- C语言版 -- 链表的部分实现代码(单向链表、双向链表、循环链表、约瑟夫环等),详细介绍参考数据结构--链表的系列博文。链接为:https://blog.csdn.net/songshuai0223/category_9742561.html。
### 数据结构之链表详解 #### 一、链表基本概念 **链表**是一种常见的数据结构,它通过一组地址不连续的存储单元来存储线性表中的各个数据元素。链表中的每个元素称为**结点**,这些结点不仅包含实际的数据信息,...
一个简单的数据结构队列链表的VC程序,供学习使用
链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态数据集合时。在Python中,虽然内置的`list`类型已经提供了很多便利,但理解链表的概念及其工作原理对于深入学习算法和数据结构是...
链表是一种基础且重要的数据结构,它在计算机科学中扮演着关键角色,特别是在处理动态数据集合时。在C语言中,链表不像是数组那样在内存中连续存储元素,而是通过一系列分散的内存块(称为节点)来表示数据。每个...
在本章中,我们探讨了如何使用C语言实现动态数据结构——单向链表。单向链表是一种线性数据结构,其中每个节点包含数据以及指向下一个节点的指针。以下是一些关于单向链表的关键知识点: 1. **节点定义**:在C语言...
介绍了数据结构中链表的构建,遍历,求表长,插入以及删除等基本操作,并用c++语言对其进行了功能实现。
在编程领域,数据结构是构建高效算法的基础,而链表作为一种基本的数据结构,对于理解和掌握高级编程技巧至关重要。本文将详细探讨如何使用Java语言来实现链表,包括顺序表和单链表、双链表。 首先,我们来看顺序表...