算法精解二十八(C语言版)

循环链表的实现与分析

同单链表一样,循环链表中的每一个元素也包含两部分;一个数据域指针和一个指向后续元素的next指针。数据结构 CListElmt代表循环链表中的单独元素(见示例5-6)。如你所料,这个结构体拥有两个成员,与前面所述的一致。数据结构Clist代表循环链表(见示例5-6).这个结构体同单链表类似,但它不包含tail成员。


clist_init

clist_init操作用来初始化一个循环链表以便稍后能够执行其他操作(见示例5-7).初始化过程同非循环的单链表一样,只是这里循环链表没有tail成员而已。

clist_init的运行时复杂度为O(1),因为初始化过程中的所有步骤都能在恒定的时间内完成。

clist_destroy

clist_destroy用来销毁一个循环链表(见示例5-7)。总的来说,该操作意味着将移除链表中的所有元素。当传递给该函数的destroy不为NULL时,每移除一个元素时都将调用clist_init一次。

clist_ins_next

clist_ins_next用来将新元素插入循环表中由参数element所指定的元素之后(见示例5-7)。将元素插入单向循环链表中的过程同非循环的单链表类似。最大的不同在于当所插入的链表是空链表时。在这种情况下,必须将所插入元素

的next指针设置为指向它自己.这就允许循环遍历只有一个元素的链表。这也确保了之后元素的插入操作能够按照恰当的方式进行。

clist_ins_next的运行时复杂度O(1),因为插入操作中的所有步骤都能够在恒定的时间内完成。

clist_rem_next

clist_rem_next将参数element所不指定的后继元素从链表中移除(见 示例5-7).从单向循环链表中移除元素的过程同非循环的链表类似。

clist_rem_next的运行时复杂度为O(1),因为移除操作中的所有步骤都能够在恒定时间内完成。

Clist_size、clist_head、clist_data以及clist_next这些宏实现循环链表的一些简单操作(见示例5-6)。总的来说,这些宏提供了访问和检测数据结构Clist和ClistElmt中的成员的接口。

以上这些宏的运行时复杂度都为O(1),因为访问和检测数据结构的成员是一种简单的操作,而且它们都能在恒定的时间内完成。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值