链表的存在意义

顺序表 compares 链表

 顺序表一般表现为数组,使用一组地址连续的存储单元依次存储数据元素。
 它具有如下特点:
  ①长度固定,必须在分配内存之前确定数组的长度
  ②存储空间连续,存储密度大
  ③要访问特定元素,可以使用索引访问,时间复杂度为 O(1)
  ④要想在顺序表中插入或删除一个元素,都涉及到之后所有元素的移动,因此时间复杂度为 O(n)

 链表,实际就是通过指针连接的多个结构体,表中的每个结点都保存有指向下一个结点的指针,所有结点串成一条链,并不需要使用连续的存储空间。
 它具有以下特点
  ①长度不固定,可以任意增删
  ①存储空间不连续,存储密度小(占用额外的空间以存储指针)
  ①要访问特定元素,只能从链表头开始,循环遍历到该元素,时间复杂度为 O(n)
  ①在特定的数据元素之后插入或删除元素,不涉及到其他元素的移动,因此时间复杂度为 O(1)

 其中:
  ①单链表是只包含指向下一个结点的指针,只能单向遍历
  ①双链表包含指向下一个结点的指针,也包含指向前一个结点的指针,因此可双向遍历
  ①循环链表则是将尾结点与首结点链接起来,形成一个环状结构,在某些情况下会适用


 顺序表和链表相比

 ①因为引入了指针索引的特点,链式结构的线性表的插入和删除特定结点的过程比顺序存储的单链表方便很多,无需移动大量元素,而是通过更改指针指向即可实现。但是与此同时,链式存储线性表查找定位特定元素则需要遍历链表直至寻找到所需元素,而顺序表可以直接通过数组下标定位元素
 ②对于顺序表而言,如果一直使用比较复杂的数据,我们肯定会感到很反感,因为需要预先对数组大小进行定义,并且还要让其空间足够大,这样才能满足我们的要求,如果分配的太多,难免又会浪费内存,这样一来,它的存储空间在数据处理过程中显得极为不方便,因为谁也不想对将要处理的数据做一个空间的预算,这是程序员都很忌讳的。而链表支持动态分配内存空间,可以任意为一些数据进行空间的分配,根据需要进行内存单元的开辟
 ③顺序表的空间利用率高,查找、存取效率高,插入和删除比较慢,不可以增长长度,有空间限制和浪费。链表的空间利用率低下(占用额外的空间以存储指针,malloc开辟,空间碎片多),查找、存取效率低,插入和删除速度快没有空间限制,存储元素的个数无上限,基本只与内存空间大小有关
* 频繁的查找却很少的插入和删除操作可以用顺序表存储,如堆排序,二分查找
* 如果频繁的插入和删除操作,而很少的查询就可以使用链表存储
* 顺序表适宜于做查找这样的静态操作;链表适宜于做插入、删除这样的动态操作
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值