线性表12|循环链表 - 数据结构和算法17
2012-12-04 03:38
435 查看
线性表12:循环链表
让编程改变世界Change the world by program
循环,顾名思义就是:绕。
打个比方,就是从前山上有座庙,庙里有个老和尚和一个小和尚,有一天老和尚对小和尚说“从前山上有座庙,庙里有个老和尚和一个小和尚,有一天老和尚对小和尚说“从前 。。。。。。
对于单链表,由于每个结点只存储了向后的指针,到了尾部标识就停止了向后链的操作。
也就是说,按照这样的方式,只能索引后继结点不能索引前驱结点。
这会带来什么问题呢?
例如不从头结点出发,就无法访问到全部结点。
事实上要解决这个问题也并不麻烦,只需要将单链表中终端结点的指针端由空指针改为指向头结点,问题就结了。
将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表成为单循环链表,简称循环链表。
No pic you say a J8环节:
[caption id="attachment_1955" align="alignnone" width="574"]
循环链表[/caption]
注:这里并不是说循环链表一定要有头结点。
其实循环链表的单链表的主要差异就在于循环的判断空链表的条件上,原来判断head->next是否为null,现在则是head->next是否等于head。
回到刚才的问题,由于终端结点用尾指针rear指示,则查找终端结点是O(1),而开始结点是rear->next->next,当然也是O(1)。
代码实现讲解,由于很多朋友要求小甲鱼把代码讲解一下,咱讲就讲吧~_~
初始化部分:ds_init.c
插入部分:ds_insert.c
删除部分:ds_delete.c
返回结点所在位置:ds_search.c
完整程序实现代码:CirLL.c
勘误:视频18分钟处,for循环是执行1一次,视频中说成了2次。[buy] 获得所有教学视频、课件、源代码等资源打包 [/buy]
[Downlink href='http://kuai.xunlei.com/d/BdsUAwoNVQCGkxNR606']视频下载[/Downlink]
[Downlink href='http://urlxf.qq.com/?ryi6bye']备胎下载[/Downlink]
相关文章推荐
- 线性表12|循环链表 - 数据结构和算法17
- 线性表12|循环链表 – 数据结构和算法17
- 数据结构习题分析:已知由一个线性链表表示的线性表中含有三类字符的数据元素,是编写算法将该线性表分割为三个循环链表,其中每个。。。。。
- 数据结构与算法之六 双向链表和循环链表
- 数据结构与算法之六 双向链表和循环链表
- 2-8-双循环链表链式存储结构-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
- C++类模板 实现双向循环链表的基本算法 《数据结构》(C++版 北京科海)中摘抄
- 线性表16:双向链表 - 数据结构和算法21
- 数据结构 P36-37 算法实现 双向循环链表的插入与删除
- 线性表16:双向链表 - 数据结构和算法21
- ※数据结构※→☆线性表结构(list)☆============单向循环链表 链式存储结构(list circular single)(四)
- 数据结构 线性表 建立循环链表
- 数据结构编程笔记六:第二章 线性表 双向循环链表的实现
- 数据结构_线性表_链式存储_单向循环链表的基本操作
- 【数据结构】-线性表-双向循环链表-1328:链表的基本操作【好题】
- 【数据结构与算法003】基本数据结构——线性表(链表)
- 设以带头结点的双向循环链表表示的线性表L= (a1,a2,…,an),试写一时间复杂度O(n)的算法,将L改造为 (a1,a3,…,an,…,a4,a2)。
- 数据结构高分笔记 算法2-18~2-19:双向循环链表
- Java数据结构-线性表之循环链表
- 《Delphi 算法与数据结构》学习与感悟[9]: 循环链表