1. 说明
当程序需要将数据存储到内存时,计算机会给你一个存储地址。需要存
储多项数据时,有两种基本方式——数组和链表。但它们并非都适用于所有的情形,因此知道它们的特性很重要。本文将对数组与链表的原理与优缺点进行总结。
2. 数组
使用数组存储多个元素的时候,数组中元素的地址时刻都是挨在一起的,为了便于理解,以看电影为例进行说明。
你和你小伙伴的关系都非常的好,如果一起看电影必须要座位要挨在一起,你先和两个小伙伴去看电影,到了电影院只坐有连续三个空位的地方(数组初始化)。找到地方就坐后又来了一位朋友,但原来坐的地方没有空位置,这时只能重新找一个可坐下所有人的地方(数组插入新元素)。如果又来了一位朋友,而当前坐的地方也没有空位,你们就得再次转移!好不容易安稳的看了会电影,有个小伙伴又要离开,为了让大家都紧挨着,有一部分小伙伴就需要挪动下座位(数组删除元素)。
真是太麻烦了。同样,在数组中添加/删除元素也很麻烦。因此数组添加/删除元素的速度都会很慢。
对于新增元素的一种解决之道是“预留座位”:即便你们现在只有3个小伙伴,也请计算机提供10个位置,以防临时有朋友来的情况。这样,只要小伙伴不超过10个,就无需转移。
该方案存在两个缺点。
- 你额外请求的位置可能根本用不上,这将浪费内存。你没有使用,别人也用不了。
- 待办事项超过10个后,你还得转移。
3. 链表
链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起,因此链表中的元素可存储在内存的任何地方,当添加/删除元素时其他的元素都不需要移动。同样以看电影为例对链表进行说明。
假设你与10位朋友去看一部很火的电影。你们11人想坐在一起,但看电影的人较多,没有11个在一起的座位,如果是数组的解决方式,这个电影就看不了了,因为实在没有这么多空的位置是在一起的。链表的解决