内容简介:我们继续上文的脚步,深入了解一下数组和链表。掌握它们之间的区别和联系,以及各自的使用场景,为后续的算法学习打好基础。为了更好的理解数组和链表,我们先来简单介绍一下计算机内存的工作原理。简单来说:计算机就像是很多抽屉的集合体,每个抽屉都有地址。
我们继续上文的脚步,深入了解一下数组和链表。掌握它们之间的区别和联系,以及各自的使用场景,为后续的算法学习打好基础。
一、计算机内存的工作原理
为了更好的理解数组和链表,我们先来简单介绍一下计算机内存的工作原理。
简单来说:计算机就像是很多抽屉的集合体,每个抽屉都有地址。
需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式:数组和链表。
二、数组
我们先不看概念,来个小例子简单认识一下。
假设我们要编写一个管理待办事项的应用程序,为此需要将这些待办事项存储在内存中。我们先将待办事项存储在数组中。使用数组意味着所有待办事项在内存中都是相连的(紧靠在一起的)。
现在假设你要添加第四个待办事项,但后面的那个抽屉放着别人的东西!在这种情况下,你需要请求计算机重新分配一块可容纳 4 个待办事项的内存,再将所有待办事项都移到那里。
那么问题来了,如果我又有了第 5 个待办事项,这时候,又得进行一次大转移。
那么有没有什么解决方案呢?答案是肯定的,但是并不完美。譬如,我们直接申请 10 个内存单元,这样就可以继续6,7,8,9,10。
这是一个不错的权变措施,但是它存在如下两个缺点:
1.你额外请求的位置可能根本用不上,这将浪费内存。你没有使用,别人也用不了。
2.待办事项超过 10 个后,你还得转移。
看起来我们的方案并不完美,那么有什么好的办法吗?
三、链表
链表中的元素可存储在内存的任何地方。
我们继续用上面的例子:
链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。
这犹如寻宝游戏。你前往第一个地址,那里有一张纸条写着“下一个元素的地址为123”。因此,你前往地址123,那里又有一张纸条,写着“下一个元素的地址为847”,以此类推。在链表中添加元素很容易:只需将其放入内存,并将其地址存储到前一个元素中。
只要有足够的内存空间,就能为链表分配内存。
链表的优势在插入元素方面,那数组的优势又是什么呢?
以上所述就是小编给大家介绍的《算法图解笔记2-数组和链表》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Hacking Growth
Sean Ellis、Morgan Brown / Crown Business / 2017-4-25 / USD 29.00
The definitive playbook by the pioneers of Growth Hacking, one of the hottest business methodologies in Silicon Valley and beyond. It seems hard to believe today, but there was a time when Airbnb w......一起来看看 《Hacking Growth》 这本书的介绍吧!