数据结构——5.双链表、循环链表

数据结构

5.双链表、循环链表

双链表

  • 如果某链表经常进行查找结点前驱的操作,我们希望查找前驱的时间复杂度也达到O(1),这时可以用空间换时间:即每个结点再增加一个指向前驱的指针域prior,使链表可以进行双向查找,这种链表称为双向链表。
  • 每个结点附加了两个指针字段,如prior/pre和next

在这里插入图片描述

深刻理解双向链表,
指向双链表某结点的指针为p;问:
p->prior->next==?;
P->next->prior==?;
答:
p->prior->next == P->next->prior == p;

在p前插入s

在这里插入图片描述

s->prior=p->prior;//①p原先的前驱成为s的前驱
p->prior->next=s; //②s成为p原先的前驱的后继
s->next=p; //③s的后继是p
p->prior=s; //④修改p的前驱为s(这条语句必须在使用了p->prior的后面,以防止p->prior被修改而使链表发生断裂)

(先让 s的前后继 和 p与p的前继 连上,再从p弯弯绕绕最远的地方开始改,陆续和s相连,即p->pre->next=s,p->pre=s)

删除p

在这里插入图片描述

p→prior→next=p→next;
p→next→prior=p→prior;
delete p;

单循环链表

在这里插入图片描述
通常单循环链表不带头结点,且往往只设尾指针
如下图所示,用一个指向尾结点的尾指针来标识单循环链表,好处是既方便查找表尾结点又方便查找首元结点

在这里插入图片描述

双循环链表

在这里插入图片描述

双循环链表头结点的prior字段给出尾结点的地址,
尾结点的next字段给出头结点的地址

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值