【数据结构】数组 VS 链表

目录:
前言
1.存储空间
2.访问元素
3.插入/删除元素
4.使用
总结

前言
首先明确一点,对于数据的存储结构,无论是数组还是列表,并没有优劣之分,只取决于你的需求。
② 为了方便后面的讨论,在这里先假设我们要存储整形数据。
③ 数组与指针的存储形式:
数组是连续存储
链表是单独存储,每个存储的元素后面跟着下一个元素位置的指针
在这里插入图片描述

(你要知道数组首元素是arr[0],这可能是数组越界最常见错误)
④指针总是占用四个字节。

下面我们分别从:存储空间,访问元素,插入/删除元素 ,使用,四方面来对比两者的优劣。

1.存储空间
由于不知道我们要存储几个整形,先创立一个整形数组arr[6]
在这里插入图片描述
)
现在假设我们要存储 : 1,2,3,4
那么数组和链表是存储结构将会是:
在这里插入图片描述

情况一:数组空间有空余且插入元素时
数组所占空间 : 4 × 6 =24
链表所占空间: (4+4)× 4 =32
此时链表所占用空间更多,但数组有空间未利用,并且你还要考虑另一种情形:那就是如果元素类型特别复杂,占用空间很大,如一个元素占16个字节,那么情况就变为了:
数组所占空间 :16 × 6 =96
链表所占空间: (16+4)× 4 =80
这种情况下,反而是链表更节省空间。

情况二:数组空间无空余且插入元素时

在这里插入图片描述

由于数组里内空间不足,所以需要创建更大尺寸的数组,并复制内容,而链表不用。

2.访问元素
在这里插入图片描述

在数组里想要访问某个元素,如访问第i个元素,只需用首元素地址+i×4 ,得出某个元素地址直接访问,时间复杂度为O(1);
在链表中想要访问某个元素,需要从第一个元素开始一个一个的往下找,时间复杂度为O(n);

3.插入/删除元素
插入与删除情况相同,下面只以一种举例

情况一:插入首元素
在这里插入图片描述

数组:需将每个元素向后移动一位,花费的时间和数组大小成正比,时间复杂度为O(n)
链表:只需创立一个新节点,并调整头指针,花费的时间不取决于数组大小,而是恒定的,时间复杂度为O(1);

情况二:在末尾插入元素
数组:如果数组未满时,直接插入即可,时间复杂度为O(1)
如果数组已满,那不得不创建新的数组,并复制,时间复杂度为O(n)
链表:还是需要从第一个元素开始往后找,遍历整个链表找个最后的元素,再创建下一个节点,时间复杂度为O(n)

情况三:在中间插入元素
数组:需要移动一半的元素,时间复杂度为O(n)
链表:从第一个元素开始找,时间复杂度为O(n)、

4.使用
链表的使用不当可能会出现内存泄漏等故障,数组相对安全。

总结:
1.链表只在某些情况下空间利用率会优于数组
2.如果从访问元素的速度来说,数组更快
3.数组或列表,无优劣之分,只取决于你的需求。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值