循环链表,双链表,顺序表和链表的比较

循环链表:在单链表中,如果将终端结点的指针域由空指针改为指向头结点,就使得整个单链表形成一个环,这种头尾相接的单链表称为循环单链表,简称循环链表。

在用头指针指示的循环链表中,找到开始结点的时间是O(1),然而要找到终端结点,则需从头指针遍历整个循环链表,其时间是O(n)。

在很多实际问题中,操作时在表的首或尾进行,此时头指针指示的循环链表就显得不够方便,如果改用指向终端结点的尾指针(rear  pointer)来指示循环链表,则查找开始结点和终端结点都很方便,他们的存储地址分别是rear--->next和rear,显然时间都是O(1).

双链表:如果希望快速确定表中任一结点的前驱点,可以在单链表的每个结点中在设置一个指向前驱结点的指针域,这样就形成了双链表。

                 和单链表类似,双链表一般也是由头指针唯一确定,增加头结点也能使双链表的某些操作变得方便,将头结点和尾结点链接起来也能构成循环双链表,这样无论是插入还是删除操作,对链表中开始结点、终端结点和中间任意结点的操作过程相同。实际应用中常采用带头结点的循环双链表!


顺序表和链表的比较操作:

1.时间性能比较:所谓时间性能是指基于某种存储结构的基本操作的时间复杂度。

顺序表的按位置随机访问快,时间复杂度为O(1),链表的按位置访问只能从表头开始依次向后扫描,直到找到那个特定的位置,所需要的平均时间为O(n).

顺序表中进行插入和删除操作需移动表长一半的元素,平均时间为O(n).链表中进行插入和删除操作不需要移动元素,在给出指向链表中某个合适位置的指针后,插入和删除操作所需的时间仅为O(1).

 一般规律:若线性表需频繁查找确很少进行插入和删除操作,或其操作和“数据元素在线性表中的位置”密切相关是,宜采用顺序表作为存储结构。

                      若线性表需频繁进行插入和删除操作,则宜采用链表作为存储过程。

2.空间性能比较:所谓空间性能是某种存储结构所占用的存储空间的大小。

         首先定义结点的存储密度:存储密度=数据域占用的存储量/这个结点所占用的存储量。

         顺序表中每个结点(即数组元素)只存放数据元素,其存储密度为1;而链表的每个结点除了存放数据元素,还要存储指示数据元素之间逻辑关系的指针。

         由于顺序表需要预分配一定长度的存储空间,如果事先不知道线性表的大致长度,则可能对存储空间预分配得过大,致使存储存储空间得不到充分利用,造成浪费,若估计得过小,又将发生上溢而造成存储空间的在分配;单链表不需要为其预分配空间,只要有内存空间可以分配,链表中的元素个数就没有限制。

        一般规律:当线性表中元素个数变化较大或者未知时,最好使用链表实现,如果事先知道线性表的长度,使用顺序表的效率会更高!

         

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值