数据结构 - 双向列表与循环列表

循环链表

    循环链表(Circular Linked List):是一种头尾相接的链表。其特点是最后一个结点的指针域指向链表的头结点,整个链表的指针域链接成一个环。
    从循环链表的任意一个结点出发都可以找到链表中的其它结点,使得表处理更加方便灵活。

循环链表的操作
对于单循环链表,除链表的合并外,其它的操作和单线性链表基本上一致,仅仅需要在单线性链表操作算法基础上作以下简单修改:
⑴ 判断是否是空链表:head->next==head ;
⑵ 判断是否是表尾结点:p->next==head ;

双向链表

   双向链表(Double Linked List) :指的是构成链表的每个结点中设立两个指针域:

一个指向其直接前趋的指针域prior,
一个指向其直接后继的指针域next。
这样形成的链表中有两个方向不同的链,故称为双向链表。
和单链表类似,双向链表一般增加头指针也能使双链表上的某些运算变得方便。
将头结点和尾结点链接起来也能构成循环链表,并称之为双向循环链表。
双向链表是为了克服单链表的单向性的缺陷而引入的
双向链表结构具有对称性,设p指向双向链表中的某一结点,则其对称性可用下式描述:
(p->prior)->next = p = (p->next)->prior ;

    结点p的存储位置存放在其直接前趋结点p->prior的直接后继指针域中,同时也存放在其直接后继结点p->next的直接前趋指针域中。
①  若插入时仅仅标记出直接前驱结点,钩链时必须注意先后次序是: “先右后左” 。部分语句组如下:
s =(DulNode *)malloc(sizeof(DulNode)); 
s ->data=e;
s ->next=p->next;   p->next->prior=s;
p->next= s; s ->prior=p;    /*  钩链次序非常重要  */
②   插入时同时指出直接前驱结点p和直接后继结点q,钩链时无须注意先后次序。部分语句组如下:
s=(DulNode *)malloc(sizeof(DulNode));
s ->data=e;
p->next= s;           s -
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值