算法快学笔记(二):数组与链表

1. 说明

当程序需要将数据存储到内存时,计算机会给你一个存储地址。需要存
储多项数据时,有两种基本方式——数组和链表。但它们并非都适用于所有的情形,因此知道它们的特性很重要。本文将对数组与链表的原理与优缺点进行总结。

2. 数组

使用数组存储多个元素的时候,数组中元素的地址时刻都是挨在一起的,为了便于理解,以看电影为例进行说明。

你和你小伙伴的关系都非常的好,如果一起看电影必须要座位要挨在一起,你先和两个小伙伴去看电影,到了电影院只坐有连续三个空位的地方(数组初始化)。找到地方就坐后又来了一位朋友,但原来坐的地方没有空位置,这时只能重新找一个可坐下所有人的地方(数组插入新元素)。如果又来了一位朋友,而当前坐的地方也没有空位,你们就得再次转移!好不容易安稳的看了会电影,有个小伙伴又要离开,为了让大家都紧挨着,有一部分小伙伴就需要挪动下座位(数组删除元素)。

真是太麻烦了。同样,在数组中添加/删除元素也很麻烦。因此数组添加/删除元素的速度都会很慢。

对于新增元素的一种解决之道是“预留座位”:即便你们现在只有3个小伙伴,也请计算机提供10个位置,以防临时有朋友来的情况。这样,只要小伙伴不超过10个,就无需转移。
该方案存在两个缺点。

  • 你额外请求的位置可能根本用不上,这将浪费内存。你没有使用,别人也用不了。
  • 待办事项超过10个后,你还得转移。

3. 链表

链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起,因此链表中的元素可存储在内存的任何地方,当添加/删除元素时其他的元素都不需要移动。同样以看电影为例对链表进行说明。

假设你与10位朋友去看一部很火的电影。你们11人想坐在一起,但看电影的人较多,没有11个在一起的座位,如果是数组的解决方式,这个电影就看不了了,因为实在没有这么多空的位置是在一起的。链表的解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值