佛祖保佑,祝福各位
1.什么是单链表
对于数据结构的解释我不想套用复杂的详尽的说明方式,因为这一部分的内容相对基础,我更希望用图片和自己的一些理解来进行解释,这样也方便于我记忆:
以往我们使用array来创建数组储存数据时,我们通常会初始化一个具体的数组大小的数据,比如说5。
如此一来,计算机就会在我们的内存中预留出一个能够存储5个相同类型的内存空间。值得注意的是,这一部分的内存空间通常是连续的,如下图所示。
通过之前的描述和图片,我们能清楚的发现数组的一个缺点,无法在运行阶段对数组进行扩容,因为数组所用的内存空间是在编译阶段就被分配好了的。虽然我们可以通过使用动态内存进行动态扩容,但是这对性能会产生很大的损耗
这个时候我们就可以假设有没有一种数据结构能使得我们可以在内存中随时创建新的内存块,并把他们和我们已有的内存块连接在一起呢?
如图,单链表就是这样一个数据结构
一个完整的单链表通常拥有一个头部(Head),虽然这不是必须,但是我们可以通过头部来有效的对单链表进行增删改查。其余的每个内存块我们称之为结点(Node)。
通过图像我们可以知道,我们声明的Node并不是连续性的,它可以在我们需要的不同时间段,在不同的内存块中声明得到。
那么如何才能将不同的Node连接到一起呢?
不难发现,我们声明的每一个Node结构其实包含了两个部分:存储的数据以及地址信息。
每一个Node都拥有其独特的地址信息,就像现实世界中两个不同的人不可能拥有同一个住址一样(家人除外嗷)。Node可以将下一个Node的地址信息存储在自己这里,这样通过访问Node 1,我们就可以知道Node 2的地址信息,在通过这个给出的地址信息去访问Node 2。
举个例子:张三,李四,王五三个人,张三知道李四家住在哪,李四知道王五家住在哪,如果我是一个陌生人,我想要知道王五家在哪里,根据顺序我得先找到李四才能问出地址,找到李四的地址就得问张三,以此类推。虽然他们三个人住在不同的小区,甚至不同的城市,但是由于他们