引入
我们学习了线性表中的顺序存储结构、单链表以及他们的初始化、插入、查找、删除等操作,今天我们来看看,没有动态创建内存空间之前,人们是如何使用链表的~
静态链表
简单来说,我们将用数组描述的链表称为静态链表,这种描述方法叫做游标实现法。
我们知道,链表是由指针域
和数据域
两个部分组成,静态链表也差不多,但它们是由数据域
和游标
组成。因为是数组,所以描述时还有一个下标
。
- 数据域:存放的是该静态链表中每个结点的数据。
- 游标:用于找到下一个结点,类似于
指针
。
下标: - 0号下标存没有数据,游标存储着可以存放数据的下标。
- max 号下标存储着该静态链表第一个结点的位置,类似于 head 指向头结点。
- 其他下标存储的是
当前结点数据
和下一个结点的下标
。
其实简单来说,因为不能动态创建内存空间,那就再顺序存储结构中设置了一个游标,游标类似于指针,存放的不是内存地址,而是下一个结点的下标。
注意
下标:指的是存放这个结构体的数组的下标。
游标:指的是数组每个元素中结构体的一个元素。
总而言之,这就是一个结构体数组
。
所以,其实就是一个数组
- 比如其中有10个元素
- 每个元素都是一个结构体
- 结构体里面有游标和数据
- 第一个和最后一个有特别的用处
- 第一个数据为空,游标为下一个可以插入的数组下标
- 最后一个数据也为空,游标为数组中第一个存放数据的数组下标
初始化静态链表
1 |
|
输出结构
1
2
3
4
5
6
7
8
9
0
其实主要就是在数组的赋值上,因为没有 data,所以
- 除了最后一个,其他都是游标指向下一个数组元素下标
- 最后一个游标为 0 ,因为没有哪个有 data
- 记得数组使从 0 开始的,所以不要忘记 Maxsize-1
注意
从上面的例子我们不难看出,其实对数组元素的要求还是蛮多的
- 我们把数组的第一个和最后一个元素做特殊处理,data 区域不存放数据。
- 我们把未使用的数组元素称为备用链表。
- 数组的第一个元素,就是数组下标为 0 的那个元素的 cur 存放的就是备用链表的第一个结点的数组下标。
- 数组的最后一个元素,也就是 Maxsize-1 这个下标存放的是数组第一个有 data 的数值的元素的下标,可以理解为单链表的 head。
- 特别注意链表中最后一个结点得游标,指向的是0下标;
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。