目录
创作不易,如有帮助,还望三连,谢谢!!!
1.链表的概念及其结构
之前我们学习了顺序表,学习了动态顺序表的功能的实现,那么今天我们就来学习一下线性表中的单链表。
那么,什么是链表呢?
概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一个个节点构成,而通过一个节点可以找到另一个节点(通过指针来实现),就比如单链表,它的每个节点中有一个next指针指向下一个节点,所以说它在物理存储结构上是非连续的。
我们之前学过的顺序表在物理存储结构上是连续的(即在内存中是连续存放的),然而链表在逻辑结构上是连续的,因为单链表中的元素是按顺序排列的,并且每个节点都有一个指针指向下一个节点,从而形成了一个逻辑上的连续序列。
这就好比火车一样:
火车的每个车厢都是独立存在的,链表中的节点也是独立存在的;每门车厢都有车门,那么想要打开车门进入下一个车厢,就需要一把钥匙,而链表节点中的指针就是这把“钥匙”。
在链表⾥,每节“⻋厢”是什么样的呢?
与顺序表不同的是,链表⾥的每节"⻋厢"都是独⽴申请下来的空间,我们称之为“结点/节点”
节点的组成主要有两个部分:。当前节点要保存的数据和保存下⼀个节点的地址(指针变量)
图中指针变量plist保存的是第⼀个节点的地址,我们称plist此时“指向”第⼀个节点,如果我们希
望plist“指向”第⼆个节点时,只需要修改plist保存的内容为0x0012FFA0。
那么为什么还需要指针变量来保存下⼀个节点的位置?
我们上面讲了链表在物理存储结构上不一定是连续的,所以说要找到下一个节点不像数组那样通过下标就能找到,所以说我们要通过指针变量来保存下⼀个节点位置才能从当前节点找到下⼀个节点。
单链表每个节点的结构体代码如下:
与顺序表结构体基本相似,除了命名不同和多了一个指向下一个结点的指针外,基本相同,不再赘述。
2.单链表的实现
与顺序表一样,我们最好建立三个文件,分别是SList.h头文件,SList.c