循环列表和双向列表

[b][size=large]本文围绕以下两个部分展开: [/size][/b]

[b][size=large]一、循环链表(circular linked list)[/size][/b]
[b][size=large]二、双向链表(double linked list)[/size][/b]


[b][size=large]一、循环链表(circular linked list)[/size][/b]

[size=medium][b]1. 概念[/b][/size]

[size=medium]将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为[b]单循环链表[/b],简称[b]循环链表[/b]。[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4074/3b89ea28-9b82-3a83-ae5a-237fc42d0357.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4076/b35e4a4e-3d82-377a-bd78-af78c80997a0.png[/img][/align]


[size=medium][b]2. 与单链表比较[/b][/size]

[size=medium][b](1)[/b]单链表,每个元素只存储了向后的指针,到了尾标志就停止了向后链的操作。这样,当中某一结点就无法找到它的前驱结点。[/size]

[size=medium]循环链表可以从当中一个结点出发,访问到链表的全部结点。[/size]

[size=medium][b](2)[/b]循环的判断条件上有差别:单链表:判断p->next是否为空;循环链表:判断p->next是否等于头结点。[/size]


[size=medium][b]3. 改造:不用头指针,用尾指针好。[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4078/cfcc5711-14ba-3bb8-98cf-f642df863bfc.png[/img][/align]

[size=medium][b](1)[/b]用头指针:可以用O(1)的时间访问开始结点,但访问终端结点由于需要将链表全部扫描一遍,因此需要O(n)的时间。[/size]

[size=medium]而用尾指针访问开始结点和终端结点都用O(1)的时间。[/size]

[size=medium][b](2)[/b]要将两个循环链表合并为一个表时,有了尾指针就非常简单了。[/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4080/7eebd5f0-82ac-36df-8140-f22f716b0a4f.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4082/c40709ec-f384-36c1-9ec6-1e2672b2ea8e.png[/img][/align]

[img]http://dl2.iteye.com/upload/attachment/0111/4084/0f40e249-dea3-3477-81a4-7eac50f08e28.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0111/4086/411c9c25-1a12-3bdb-a8f7-b0cb93ef73cc.png[/img]


[b][size=large]二、双向链表(double linked list)[/size][/b]

[size=medium][b]1. 概念[/b][/size]

[size=medium]双向链表是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。[/size]


[size=medium][b]2. 双向链表存储结构[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4088/3e808f8e-c932-30e0-9bd3-b586bef55025.png[/img][/align]


[size=medium][b]3. 插入[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4090/e5543ea7-24ee-3fbd-b16f-24494dda12cd.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4092/c77a4df1-1e94-3f7b-9ac2-eb30dcd7c120.png[/img][/align]


[size=medium][b]4. 删除[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4094/88d17831-066e-3f1e-b402-68d5b8ec4610.png[/img][/align]

[img]http://dl2.iteye.com/upload/attachment/0111/4096/b39e019a-332d-3190-a7f1-58a1a2dd3224.png[/img]
[img]http://dl2.iteye.com/upload/attachment/0111/4098/b99626aa-dc76-349f-b317-f9d9abced451.png[/img]


[size=medium][b]5. 双向循环链表(双向链表带有循环)[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4100/b6fb394c-1ddb-3bbe-a8b8-f44f0fccdafc.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0111/4102/8c64cbf2-a949-3837-af80-62f1b07d6f5d.png[/img][/align]


[size=large]整理时重点参考:[color=red]《大话数据结构》程杰著[/color][/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值