问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

单链表,双链表和循环链表之间的区别详解1

发布网友 发布时间:2024-02-26 06:42

我来回答

1个回答

热心网友 时间:2024-06-21 14:28

链表是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每个节点里存到下一个节点的指针。由于不须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比顺序表O(logn)快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表的时间复杂度是O(1)。
链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。
链表由一连串节点组成,每个节点包含任意的实例数据(data fields)和一或两个用来指向明上一个/或下一个节点的位置的链接("links")。链表是一种自我指示数据类型,因为它包含指向另一个相同类型的数据的指针。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。链表有很多种不同的类型:单向链表,双向链表以及循环链表。
链表可以在多种编程语言中实现。

单向链表或者单链表

单向链表,它包含两个域,一个信息域和一个指针域。这个链接指向表中的下一个节点,而最后一个节点则指向一个空值NULL。
单向链表只可向一个方向遍历。
查找一个节点的时候需要从第一个节点开始每次访问下一个节点,一直访问到需要的位置。也可以提前把一个节点的位置另外保存起来,然后直接访问。

双向链表,也叫双链表

双向链表中不仅有指向后一个节点的指针,还有指向前一个节点的指针。第一个节点的"前连接"指向NULL,最后一个节点的"后连接"指向NULL。
这样可以从任何一个节点访问前一个节点,也可以访问后一个节点,以至整个链表。一般是在需要大批量的另外储存数据在链表中的位置的时候用。
由于另外储存了指向链表内容的指针,并且可能会修改相邻的节点,有的时候第一个节点可能会被删除或者在之前添加一个新的节点。这时候就要修改指向首个节点的指针。
有一种方便的可以消除这种特殊情况的方法是在最后一个节点之后、第一个节点之前储存一个永远不会被删除或者移动的虚拟节点,形成一个循环链表。这个虚拟节点之后的节点就是真正的第一个节点。这种情况通常可以用这个虚拟节点直接表示这个链表。

循环链表

在一个循环链表中, 首节点和末节点被连接在一起。这种方式在单向和双向链表中皆可实现。要转换一个循环链表,你开始于任意一个节点然后沿着列表的任一方向直到返回开始的节点。循环链表可以被视为"无头无尾"。
循环链表中第一个节点之前就是最后一个节点,反之亦然。循环链表的无边界使得在这样的链表上设计算法会比普通链表更加容易。对于新加入的节点应该是在第一个节点之前还是最后一个节点之后可以根据实际要求灵活处理,区别不大。
另外有一种模拟的循环链表,就是在访问到最后一个节点之后的时候,手工跳转到第一个节点。访问到第一个节点之前的时候也一样。这样也可以实现循环链表的功能,在直接用循环链表比较麻烦或者可能会出现问题的时候可以用。

其它

链表中的节点不需要以特定的方式存储,但是集中存储也是可以的,主要分下面这几种具体的存储方法:
共用存储空间:链表的节点和其它的数据共用存储空间,优点是可以存储无限多的内容(不过要处理器支持这个大小,并且存储空间足够的情况下),不需要提前分配内存,存储一个申请一个,如C语言的MALLOC;缺点是由于内容分散,有时候可能不方便调试。
独立存储空间:一个链表或者多个链表使用独立的存储空间,一般用数组或者类似结构实现,优点是可以自动获得一个附加数据:唯一的编号/索引,并且方便调试;缺点是不能动态的分配内存。当然,另外的在上面加一层块状链表用来分配内存也是可以的,这样就解决了这个问题。这种方法叫做数组模拟链表,但是事实上只是用表示在数组中的位置的下标索引代替了指向内存地址的指针,这种下标索引其实也是逻辑上的指针,整个结构还是链表,并不算是被模拟的(但是可以说成是用数组实现的链表)。
链表用来构建许多其它数据结构,如堆栈,行列和他们的衍生。
节点的数据域也可以成为另一个链表。通过这种手段,我们可以用列表来构建许多链性数据结构;这个实例产生于Lisp编程语言,在Lisp中链表是初级数据结构,并且现在成为了常见的基础编程模式。 有时候,链表用来生成联合数组,在这种情况下我们称之为联合数列。这种情况下用链表会优于其它数据结构,如自平对分查找树(self-balancing binary search trees)甚至是一些小的数据集合。不管怎样,一些时候一个链表在这样一个树中建立一个节点子集,并且以此来更有效率地转换这个集合。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? 单链表和循环链表操作用什么不一样? 循环链表和双向链表的区别是是什么?38 起床的时候如果起的速度快了会头晕 《这世界欢迎梦想与美貌》epub下载在线阅读,求百度网盘云资源_百度知 ... 含羞草图片 含羞草(花期图 果期图 欣赏图) 瓶底书汉隶仿前朝的飘逸 ??? 吃了醋葡萄干觉得有点便秘 谈恋爱男生要处处让着女生吗?184 怎样理解社会主义核心价值观是评判是非曲直的价值标准5 古代传说中能辨别忠奸的神兽是什么37 分析作为我国判断是非曲直的价值标准社会主义核心价值观确立的价...3 两只鸟对着尾巴打一成语 两头马 尾巴对着尾巴 背着走 猜一成语 看图猜成语两条牛尾巴带一些音符 天天猜成语有一凤凰两条长尾巴打一成语 疯狂猜成语一个幽字带着两条很长的尾巴 成语玩命猜答案图解画着两个尾巴 有糖尿病的人可以喝板蓝根吗? 孕妇可以喝板蓝根吗孕妇是否可以喝板蓝根 ...但是她只回复了几个擦汗的表情!她是什么意思呢? 求问c语言单向链表和双向链表与循环链表的区别91 对比单链表双向链表循环链表的相同点,不同点及特点33 泉州市区哪里摆地摊不会被抓 洗衣机冻住了怎样解冻? 请问藏香有没有什么毒副作用? 不问青红皂白什么意思1 不分青红皂白什么意思191 不分青红皂白是什么意思3 青红皂白什么意思2 不分青红皂白是什么意思呢? 不分青红皂白的分是什么意思22 "爸爸不问青红皂白,狠狠的批评了他"中的"白"是什么意思??...22 会计分录为什么不能把应收和预收账作在同一个分录 求解硫酸酸化的目的 对于单链表,双链表的优点都有哪些?4 单链表双向链表循环链表的优点6 头发绑头发怎么绑得稳 谢谢你的回答,这是标准对汇率,但是你能查到中国银行当天美元买入人民币... 陈韩烯家住哪 陈韩烯视频为什么没有爸爸