数组与链表(算法图解笔记2)

内存的工作原理

需要将数据储存到内存时,首先请求计算机提供储存空间, 计算机提供存储地址。就像逛超市时要存物品一样, 没有使用的柜子都可以存, 如果物品多就多用几个柜子。
在这里插入图片描述

数组

数组是一种内存处理方式, 数组核心的特征在于数据是连在一起的 。所以遇到要存储的数据超过计算机提供的空间时,需要重新提供更大的空间, 就得将全部数据移到其他地方。 (就像去饭店吃饭,中途又来了几个朋友, 你们必须坐在一起,所以必须换个大桌子)。 有同学会说计算机给某个数组预留充足的空间可以缓解这个问题 。但是预留仍然存在两个问题:
一 额外预留的空间可能用不上, 这就造成了内存的浪费。就像两个人就餐使用了一个大包间,但需要包间的人没法用
二 由于预留不能超额太多,一旦不够用了仍然需要转移。

链表

链表与数组不同的是,链表中元素可以存在任意的位置, 链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。这就像你和室友到食堂吃饭, 但是没有四个连在一起的位置了,你的室友说 ,“我们分开坐吧”。 但是数组必须存储在连续的内存地址, 就像你和女朋友去食堂吃饭,不可以分开坐 。
在这里插入图片描述

数组与链表的特点比较

数组和链表存储方式的不同, 导致了数组和链表的特性差异。

读取数据

在读取数组数据时, 由于内存地址是连续的, 那么每个数据的内存地址都可以计算, 可以随意读取任何元素(这就是数组元素非要在一起的原因)。 但在需要读取链表的一个元素时,你不能直接读取,因为你不知道,它所处的地址,必须先访问第一个元素,从中获取元素第二个的地址,再访问第二个元素并从中获取第三个元素的地址,以此类推,直到访问到需要的元素。显然链表的读取效率较低。

插入数据

在插入数据时, 如果向数组种插入第一数据,那么后面的所有数据都需要重新插入。 如果向链表种插入一个数据,只需要修改前后数据的指引。 删除数据和插入数据同理 。

数组链表
读取O(1)O(n)
插入O(n)O(1)
删除O(n)O(1)

总结

数组读取数据很快,但插入和删除数据都很慢
链表读取较慢,但插入和删除数据都很快

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值