线性表12|循环链表 – 数据结构和算法17
2015-11-16 17:05
459 查看
线性表12:循环链表
让编程改变世界Change the world by program
循环,顾名思义就是:绕。
打个比方,就是从前山上有座庙,庙里有个老和尚和一个小和尚,有一天老和尚对小和尚说“从前山上有座庙,庙里有个老和尚和一个小和尚,有一天老和尚对小和尚说“从前 。。。。。。
对于单链表,由于每个结点只存储了向后的指针,到了尾部标识就停止了向后链的操作。
也就是说,按照这样的方式,只能索引后继结点不能索引前驱结点。
这会带来什么问题呢?
例如不从头结点出发,就无法访问到全部结点。
事实上要解决这个问题也并不麻烦,只需要将单链表中终端结点的指针端由空指针改为指向头结点,问题就结了。
将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表成为单循环链表,简称循环链表。
No pic you say a J8环节:
循环链表
注:这里并不是说循环链表一定要有头结点。
其实循环链表的单链表的主要差异就在于循环的判断空链表的条件上,原来判断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次。转自:http://blog.fishc.com/1954.html
相关文章推荐
- 线性表11|单链表小结:腾讯面试题 – 数据结构和算法16
- 线性表10 – 数据结构和算法15
- 线性表8 – 数据结构和算法13
- 线性表9 – 数据结构和算法14
- 线性表7 – 数据结构和算法12
- 线性表6 – 数据结构和算法11
- 线性表5 – 数据结构和算法10
- 线性表4 – 数据结构和算法09
- 项目1--图基本算法库
- 第12周 项目1—数据结构之自建算法库——图及其存储结构(邻接矩阵、邻接表)
- 数据结构实践—— 二叉树算法验证(中序线索化二叉树的算法验证)
- 第十二周 图 项目2--操作用邻接表存储的图
- 线性表3 – 数据结构和算法08
- 线性表2 – 数据结构和算法07
- 线性表1 – 数据结构和算法06
- 数据结构实践——二叉树算法验证(二叉树构造算法的验证)
- 时间复杂度和空间复杂度3 – 数据结构和算法05
- 2015-11-16 【项目1 - 图基本算法库】
- 数据结构—树——20150604
- 时间复杂度和空间复杂度2 – 数据结构和算法04