首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

线性结构-链表

链表也是一种常用的线性数据结构,与数组不同的是,链表的存储空间并不连续,它是用一组地址任意的存储单元来存放数据的,也就是将存储单元分散在内存的各个地址上。...这些地址分散的存储单元叫做链表的节点,链表就是由一个个链表节点连结而成的。 每个链表都有一个“链表头”,通常是一个指针。对Java而言,它是链表节点对象的引用。用来存放链表中第一个节点的地址。...链表的定义 定义链表节点 链表是由链表节点构成的,因此在定义链表结构之前,要先定义链表的节点类型。...操作链表的函数可以根据需要而定。 链表的基本操作 链表的基本操作包括向链表中插入节点和从链表中删除节点,另外根据实际需要可以定义获取链表长度、销毁链表等操作。...因此对于线性表规模难以估计或插入删除操作频繁、随机读取数据的操作较少的场景,更建议使用链表。 不同形态的链表结构 我们将节点中包含一个指针与且指针只能指向该节点的后继节点的链表称作单链表

27720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    线性结构 数组与链表

    线性结构 数组与链表 线性结构 线性数据结构有两端,有时被称为左右,某些情况被称为前后。你也可以称为顶部和底部,名字都不重要。...将两个线性数据结构区分开的方法是添加和移除项的方式,特别是添加和移除项的位置。例如一些结构允许从一端添加项,另一些允许从另一端移除项。...数组的定义是:一个存储元素的线性集合(Collection),元素可以通过索引(Index)来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量。...相对于数组,链表的好处在于,添加或移除元素的时候不需要移动其他元素。 链表的种类 单向链表(Singly linked list):是最基本的链表,每个节点一个引用,指向下一个节点。...单向链表的操作 方法 操作 append 向链表尾部添加一个元素 insert 在链表的指定位置插入一个元素 pop 从链表特定位置删除并返回元素 remove 从链表中删除给定的元素 find 返回元素的索引

    46930

    线性表(2)——单链表

    1,先建实体类LinkNode类和实体类LinkList类; LinkNode:包括链表结点的数据域和指针域; 数据域是Object类型的,指针域是LinkNode类型的 LinkList:包括链表的头结点和链表元素个数...; 头结点是LinkNode类型的,链表元素个数是int型的 LinkNode: package com.java.model; public class LinkNode { //链表结点的数据域...) { super(); this.head = head; this.size = size; } } 2,再建方法类LinkListDao类; 这里面包含一些对线性表操作的方法...; 如:初始化链表,指定位置插入元素,删除指定位置的值,获得链表长度等; package com.java.dao; import com.java.model.LinkList; import com.java.model.LinkNode...("删除元素C之后的链表为:"); linkListDao.Print_LinkList(list); System.out.println(); //获得链表长度

    29620

    线性表--单链表--循环链表--双链表--三表总结(七)

    链表: ? 单链表就好比是一条路走到黑,无法回头,如果要访问任意结点,每次只能从头访问,也就是顺序访问,它的遍历只能是一个方向,不能后退 循环链表: ? ?...循环链表中没有NULL指针,涉及遍历时,终止条件不再是单链表的P!...=NULL;而是判断他们是否等于某一个特定的指针,单链表只能从已知结出发,访问其后续结点,而循环链表从已知结点出发,可以访问链表中所有结点。 双向链表: ?...虽然有了循环链表,但是如果数据庞大,想要得到已知结点前面的数据,再跑一圈的成本有点大,这个时候,双向链表就出来了,双向链表增加了前驱指针,它可以随心所欲,向前,或者是向后访问。...总结: 单链表:如果访问任意结点每次只能从头开始顺序向后访问。 单循环链表:可以从任何一个结点开始,顺序向后访问到达任意结点。 双向链表:可以从任何结点开始任意向前向后双向访问。

    1K30

    数据结构--线性表链式存储(链表)--单链表

    定义: 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。...链表中的数据是以节点来表示的,每个结点的构成:元素( 数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。...链表特点: 根据线性表的长度动态的申请存储空间,以解决顺序存储中存在的存储空间难以确定的问题。 元素的要素: 指针:指向下一个元素。 值:当前元素储存的数据。...Node *next; //此处也可以省略 }; template class LinkList { Node *first; // 单链表的头指针...i]; //为每个数组元素建立一个结点 r->next=s; r=s; //插入到终端结点之后 } r->next=NULL; //单链表建立完毕

    40810

    【数据结构】线性表 ② ( 链式存储结构 - 链表 | 链表分类 - 单链表链表 非循环链表 循环链表 | 链表优缺点 )

    ,可以实现 线性表 数据元素 的连接。...Object data; // 指向下一个节点 Node next; // 指向上一个节点 Node last; } 二、链表分类 - 单链表 / 双链表 / 非循环链表 / 循环链表链表...与 双链表 : 单链表 : 上述链表是 单链表 , 单链表 只有一个指针 指向下一个节点 ; 双链表 : 还有一种链表是 双链表 , 双链表 有两个指针 , 一个指向下一个节点 , 一个指向上一个节点...; 循环链表 : 如果 最后一个节点的指针 指向 第一个节点 , 那么这个链表就是循环链表 ; 链表可以分为以下四类 : 单链表 单循环链表链表 双循环链表 三、链表优缺点 链表 LinkedList...消耗空间多 : 链表需要 额外的指针 来维护节点之间的关系,增加了存储空间的消耗。 线性表 选择 : 选择使用 顺序表 还是 链表,取决于具体的 应用场景 和 操作需求。

    31740

    线性表--顺序表--静态链表(八)

    1.介绍 前面的链表都是使用指针类型实现的,并且都是由系统提供的函数malloc和free动态实现,被称之为动态链表,像C,C++,是拥有“指针”这类数据类型的,不需要使用静态链表,而对于BASIC,FORTRAN...之类的高级语言中,并没有提供“指针”这类数据类型,若要继续采用链表作为数据的存储结构,只能采用数组来模拟实现链表,所以下面的知识是针对没有“指针”类型的高级语言而用数组设计的拥有链表存储结构的静态链表。...2.备用链表 只有一条数据链表是不行的,这样没有考虑对已释放空间的回收,只拿出来用,却不记谁在用,这样在经过多次插入和删除后,会造成静态链表“假满”的情况,为此,还需要有一条连接各个空闲位置的链表,称为备用链表...1.空闲的静态链表如图1所示,在通常情况下备用链表的表头位于数组下标为 0(arr[0]) 的位置,而数据链表的表头位于数组下标为 1(arr[1])的位置。...通过arr[0]可知道整条链表没有数据为空闲状态, 4.当空闲链表存储第一个数据,如图2所示,数据链表的数据存储始于arr[1],所有arr[1]存放了a,它的游标为0,代表着结束,备用链表的头结点的游标变为

    60910

    循环链表线性表的应用

    循环链表的应用之约瑟夫环问题以及线性表总结之顺序表与链表的比较   1.1问题说明   问题描述:编号为1,2,···,n的n个人围坐在一圆桌旁,每人持有一个正整数的密码。...  线性表有两种存储结构:顺序表和链表,通过对它们的讨论可知它们各有优缺点。   ...线性表有两种存储结构----顺序表和链表,以及在这两种存储结构上实现的基本运算。   顺序表是用数组实现的,链表是用指针或游标实现的。...这两种链表又可按链接形式的不同,区分为单链表,双链表和循环链表。   在实际应用中,对线性表采用哪种存储结构,要视实际问题的要求而定,主要考虑求解算法的时间复杂度和空间复杂度。...最后分享些循环链表线性表的应用方面的资料   循环链表线性表的应用 http://www.makeru.com.cn/course/details/1902?s=45051

    54430

    线性表--顺序表--双向链表(六)

    双向链表图示 ? 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。...1.定义链表 typedef struct Node { int data; struct Node * prior; struct Node * next; }Node; 2.初始化头尾结点 Node...*)malloc(sizeof(Node)); End->data = 0; End->next = NULL; End->prior = NULL; return End; } 3.初始化链表结点...(2)代码 int InsertList(Node ** Head, Node ** End,int i,int num)//i为插入位置 { //我们可以在头结点的数据存储链表长度,来判断插入位置是否合法...,这里假定输入的i合法 //因为有首尾链表,我们可还以判断输入位置在前半部分,还是后半部分,从而选择使用头节点还是尾节点,这里就不做示范了 j = 0; Node *Phead = (*Head)

    29431

    线性表--顺序表--循环链表(五)

    一.介绍 单循环链表,简称循环链表,是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。...和单链表唯一的区别就是,尾结点指向头结点,因此循环链表中没有NULL指针。...而在单循环链表中,从任一结点出发都可访问到表中所有结点,这一优点使某些运算在单循环链表上易于实现。 二.图示 单链表是这样的: ? 循环链表是这样的: ?...二.代码实现 1.定义链表 上面已经说过,循环链表和单链表唯一的不同就在于尾结点指向头结点,所以链表的定义和单链表一样。...} 至于循环链表的增删查改,都同单链表一样,我们就不在多赘述,只是在遍历这块有一定小猫腻。

    49830

    【数据结构】线性表----链表详解

    部分其他链表的代码实现 循环链表 双向链表 优点/缺点(对比顺序表) 优点 缺点 链表的定义 前面我们介绍的顺序表,在逻辑结构和物理结构上都是线性、连续的关系,那么我们在篇尾的时候也提到了是否有一种顺序表...链表(LinkList)属于线性表的一种,以下是百度百科关于链表的定义: 总结下来,我们可以看出: 在结构上,链表并不是像顺序表那样底层结构是数组,而是包含两个区域:数据域、指针域。...所以,如果要用一句话概括链表是什么,我们可以说:链表是一种线性数据结构,由结点组成,每个结点包含一个数据元素也就是数据域和指向下一个节点的指针也就是指针域。...循环链表可以从任意节点开始遍历,但需要注意避免出现死循环的情况。 不循环链表:最后一个节点的指针直接指向空,仅仅作为线性结构。...Status SLTGet(LinkList L, int i, ElemType& e)//获取线性表L中的耨个数据元素的内容,通过变量e返回 { p = L->next;

    8710

    2-5 线性表之循环链表

    2-5 线性表之循环链表 循环链表就是链表首尾相接连成一个环,可以用单链表 和 循环链表来实现。...下面分别来看两种情况: 1、使用单链表构建循环链表 为了方便,我这里使用带头结点的单链表来构建循环链表,至于单链表带不带头结点的异同,我在前面的线性表之链表那篇文章中已经做过分析,就不再赘述。...单向循环链表是指在单链表的基础上,表的最后一个元素指向链表头结点,不再是为空。 ? 所以判断是否是最后一个元素 的条件 也从 p->next != null; 变成了 p->next !...= head; 由于这个判断 条件的变化,相比于原来的单链表的程序,就会在有一些地方有所变化 2.使用双向链表 构建 循环链表 ?...双向链表的程序我在前一篇也写过,所以这里也不再赘述了 也是把最后一个元素的判断条件改为:P->next !

    32740

    数据结构中的线性离散存储-链表

    在上节,我们已经了解到了线性存储中的连续存储,我们还把这种存储结构叫做顺序表,或者数组。...并且知道线性连续存储存在以下优缺点: 顺序表 优点:能实现快速追加和存取元素 缺点:插入元素或删除元素都要移动大量的原有元素 在本节,我们将一起来了解《数据结构》中研究的另一种线性数据结构-离散存储,我们也可以把线性的离散存储叫做链表...链表的基本结构如下图: 如果你没有阅读过本系列的前面部门文章,建议您通过以下链接先阅读之前的内容: 1.从线性连续存储开始,重新认识《数据结构》 一 链表的实现过程 01 定义链表节点、创建链表 和顺序表相比...但不容易实现随机存取元素线性表中第i个元素的操作。所以链表适用于需要经常进行插入和删除的操作的线性表,如飞机航班乘客表。...、计算链表长度 如果链表头节点的指针域为空,则链表是空链表

    54530

    Algorithms_基础数据结构(02)_线性表之链表_单向链表

    ---- 链表的定义 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。...相比于线性表顺序结构,操作复杂。...由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn...使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。...---- 链表的特点 不需要连续的内存空间 有指针引用 ---- 常见的链表结 三种最常见的链表结构:单向链表、双向链表 和循环链表 (单向循环链表、双向循环链表) ---- 单向链表 单向链表是由一个个节点组成的

    35540
    领券