内容简介:我们继续上文的脚步,深入了解一下数组和链表。掌握它们之间的区别和联系,以及各自的使用场景,为后续的算法学习打好基础。为了更好的理解数组和链表,我们先来简单介绍一下计算机内存的工作原理。简单来说:计算机就像是很多抽屉的集合体,每个抽屉都有地址。
我们继续上文的脚步,深入了解一下数组和链表。掌握它们之间的区别和联系,以及各自的使用场景,为后续的算法学习打好基础。
一、计算机内存的工作原理
为了更好的理解数组和链表,我们先来简单介绍一下计算机内存的工作原理。
简单来说:计算机就像是很多抽屉的集合体,每个抽屉都有地址。
需要将数据存储到内存时,你请求计算机提供存储空间,计算机给你一个存储地址。需要存储多项数据时,有两种基本方式:数组和链表。
二、数组
我们先不看概念,来个小例子简单认识一下。
假设我们要编写一个管理待办事项的应用程序,为此需要将这些待办事项存储在内存中。我们先将待办事项存储在数组中。使用数组意味着所有待办事项在内存中都是相连的(紧靠在一起的)。
现在假设你要添加第四个待办事项,但后面的那个抽屉放着别人的东西!在这种情况下,你需要请求计算机重新分配一块可容纳 4 个待办事项的内存,再将所有待办事项都移到那里。
那么问题来了,如果我又有了第 5 个待办事项,这时候,又得进行一次大转移。
那么有没有什么解决方案呢?答案是肯定的,但是并不完美。譬如,我们直接申请 10 个内存单元,这样就可以继续6,7,8,9,10。
这是一个不错的权变措施,但是它存在如下两个缺点:
1.你额外请求的位置可能根本用不上,这将浪费内存。你没有使用,别人也用不了。
2.待办事项超过 10 个后,你还得转移。
看起来我们的方案并不完美,那么有什么好的办法吗?
三、链表
链表中的元素可存储在内存的任何地方。
我们继续用上面的例子:
链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。
这犹如寻宝游戏。你前往第一个地址,那里有一张纸条写着“下一个元素的地址为123”。因此,你前往地址123,那里又有一张纸条,写着“下一个元素的地址为847”,以此类推。在链表中添加元素很容易:只需将其放入内存,并将其地址存储到前一个元素中。
只要有足够的内存空间,就能为链表分配内存。
链表的优势在插入元素方面,那数组的优势又是什么呢?
以上所述就是小编给大家介绍的《算法图解笔记2-数组和链表》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入Linux内核架构
Wolfgang Mauerer / 郭旭 / 人民邮电出版社 / 201005 / 149.00元
众所周知,Linux操作系统的源代码复杂、文档少,对程序员的要求高,要想看懂这些代码并不是一件容易事。本书结合内核版本2.6.24源代码中最关键的部分,深入讨论Linux内核的概念、结构和实现。具体包括进程管理和调度、虚拟内存、进程间通信、设备驱动程序、虚拟文件系统、网络、时间管理、数据同步等方面的内容。本书引导你阅读内核源代码,熟悉Linux所有的内在工作机理,充分展现Linux系统的魅力。 ......一起来看看 《深入Linux内核架构》 这本书的介绍吧!