【线性结构】链表(顺序表 VS 链表、8种链表结构、单链表、双向链表)

文章对比了顺序表和链表的特性,顺序表支持随机访问但插入删除效率低,而链表在插入删除上高效但不支持随机访问。顺序表在扩容时可能造成资源浪费,而链表可以按需分配内存。文章提到了8种链表结构,并指出最常用的两种是无头单向非循环链表(常用于哈希桶、图的邻接表)和带头双向循环链表(适合单独存储数据)。
摘要由CSDN通过智能技术生成

一、顺序表 VS 链表

1.顺序表

优点

  • 支持随机访问(用下标访问);有些算法需要结构支持随机访问。如二分查找、优化后的快排等等。
  • CPU高速缓存命中率更高

缺点

  • 头部中部插入删除效率低【O(N)】
    • 顺序表要求数据从开始位置连续存储。那么我们在头部或者中间位置插入或删除数据时,就需要挪动数据,效率低【O(N)】。
  • 扩容消耗资源
    • 空间不够了需要增容,增容是要付出代价的。尤其是realloc异地扩容(还需要拷贝原数据【O(N)】)
    • 为了避免频繁扩容,空间满了我们基本都是扩大2倍,可能就会导致一定的空间浪费。

2.链表

优点

  • 任意位置插入删除效率高【O(1)】
    • 由于存储空间是不连续的,也就不存在顺序表扩容拷贝和插入数据需要挪动所有元素的问题
  • 更合理的使用内存空间
    • 按需申请内存空间,不用了就释放空间

缺点

  • 不支持随机访问(用下标访问);这就意味着一些排序、二分查找等在这种结构上不适用。
  • 链表存储一个值,同时还要存储链接指针,有一定的消耗。
  • CPU高速缓存命中率更低

在这里插入图片描述


二、8种链表结构

单向、双向

在这里插入图片描述

带头、不带头

在这里插入图片描述

单链表、循环链表

在这里插入图片描述


三、最常用的两种链表结构

无头单向非循环链表

在这里插入图片描述

无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结
构的子结构,如哈希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。


带头双向循环链表

在这里插入图片描述

带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都
是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带
来很多优势,实现反而简单了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芥末虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值