线性表(三)

循环链表循环链表是另-种形式的链式存储结构。其特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。 由此,从表中任一-结点出发均可找到表中其他结点,图2.17所示为单链的循环链表。循环单链表的操作和单链表基本一致,差别仅在于:当链表遍历时,判别当前指针p是否指向表尾结点的终止条件不同。在单链表中,判别条件为p!=NULL或p->next!=NULL.而循环单链表的判别条件为p...
摘要由CSDN通过智能技术生成

循环链表

循环链表是另-种形式的链式存储结构。其特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。 由此,从表中任一-结点出发均可找到表中其他结点,图2.17所示为单链的循环链表。
在这里插入图片描述
循环单链表的操作和单链表基本一致,差别仅在于:当链表遍历时,判别当前指针p是否指向表尾结点的终止条件不同。在单链表中,判别条件为p!=NULL或p->next!=NULL.而循环单链表的判别条件为p!=L或p->next!=L。
在某些情况下,若在循环链表中设立尼指针而不设头指针(见图218(2)可使一些换作简化。例如,将两个线性表合并成个表时,仅需将第一个表的尾指针指向第二个表的第一个结点,第二个表的尾指针指向第一个 表的头结点,然后释放第二个表的头结点。当线性表以图2.18 (a)的循环链表作存储结构时,这个操作仅需改变两个指针值即可,主要语句段如下:

              p= B->next->next;
              B->next = A->next;
              A->next= p;

上述操作的时间复杂度为01),合并后的表如图2.18 (b)所示。

在这里插入图片描述

双向链表

以上讨论的链式存储结构的结点中只有一个指示直接后继的指针域,由此,从某个结点出发只能顺指针向后寻查其他结点。若要寻查结点的直接前驱,则必须从表头指针出发。换句话说,在单链表中,查找直接后继结点的执行时间为O(1),而查找直接前驱的执行时间为O(n)。为克服单链表这种单向性的缺点,可利用双向链表
顾名思义,在双向链表的结点中有两个指针域,一个指向直接后继,另一个指向直接前驱,结点结构如图2.19 (a)所示,在c语言中可描述如下:

//--- - -双向链表的存储结构---- -
typedef struct DuLNode
{
   
ElemType data;
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值