引入
我们说过动态链表是使用malloc( )
和 free( )
这两个函数来实现的,动态插入,动态释放。那么静态链表该如何实现这样的功能呢?
静态链表中插入数据
简单来说就是要分清楚哪些没有使用过,哪些已经在使用了。
我们说
备用链表
存放的是所有可以用的下标
,用游标链接
。- 数组的
第一个元素
,存放的是备用链表的第一个可用下标
所以
每次插入新节点,都可以从备用链表
取得第一个结点作为待插入结点
。
步骤分解
1、先获取
0下标指向的备用链表的第一个可写入下标
。
2、第一个可写入的结点的游标传递给0下标。
3、判断插入地址是否合法,不能小于1,不能大于结点长度+1的位置。
4、对第一个可写的节点的 data 赋值
5、通过循环从最后一个结点向前找到要插入的节点之前的结点
6、找到之后新结点的游标改成之前结点的游标
7、前一结点的游标指向新节点的下标。
代码实现
我设计了三个函数,静态链表初始化、获取静态链表当前长度、静态链表顺序插入函数。然后再静态链表中插入三个数据,并返回目前链表的情况以及它们的游标。以及下一个可用的下标。
1 |
|
伪代码
1 | int Malloc_SLL(StaticLinkList space){ |
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。