数据结构之线性表(六)——循环链表

循环链表的定义

1.概念与特点

循环链表:是一种头尾相接的链表。
表中的最后一个结点的指针域指向头结点,整个链表形成环状结构。
在这里插入图片描述
优点:从表中任意一个结点出发均可找到表中其他结点。

补充:
       由于循环链表中没有NULL指针,所以涉及到遍历操作时,其终止条件不再像单链表那样判断p或者p->next是否为空,而是判断它们是否等于头指针,如下图所示,
在这里插入图片描述
2.循环链表的查找(两种表示法)

  • 用头指针表示单循环链表
    • a 1 a_1 a1的时间复杂度: O ( 1 ) O(1) O(1)
    • a n a_n an的时间复杂度: O ( n ) O(n) O(n)
      在这里插入图片描述

因为对表的操作常常是在首尾位置上进行,所以该表示方法对于查找首尾元素而言不方便。

  • 用尾指针表示单循环链表
    • a 1 a_1 a1的存储位置:R->next->next
    • a n a_n an的存储位置:R
      在这里插入图片描述
      所以查找首尾元素的时间复杂度为: O ( 1 ) O(1) O(1),所以用尾指针的这种表示法,在操作循环链表时更为方便。

循环链表的合并

这里主要描述带 尾指针的循环链表合并(将Tb合并在Ta之后)
在这里插入图片描述

  • 具体步骤:

    • 1.p保存Ta表的表头结点,即p=Ta->next
    • 2.将Tb表的表头接到Ta表的表尾,即 Ta->next=Tb->next->next
    • 3.释放Tb表的头结点,即delete Tb->next
    • 4.修改指针,使Tb的表尾连结到Ta的表头,即Tb->next=p
      在这里插入图片描述
  • 算法描述:

LinkList Connect(LinkList Ta, LinkList Tb)
{
	p = Ta->next;                       //p存放Ta表的表头结点
	Ta->next = Tb->next->next;          //Tb表头连结Ta表尾
	delete Tb->next;                    //释放Tb表头结点
	Tb->next = p;                       //修改指针,使Tb的表尾连结到Ta的表头
	return Tb;
}

上述算法的时间复杂度为 O ( 1 ) O(1) O(1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值