9.0、C语言数据结构——静态链表
静态链表的组成结构:
- 我们对数组的第一个和最后一个元素做特殊处理,他们的data不存放数据;
- 我们通常把未使用的数组元素称为备用链表;
- 数组的第一个元素,即下标为 0 的那个元素的 cur 就存放备用链表的第一个结点下标;
- 数组的最后一个元素,即下标为 MAXSIZE - 1 的 cur 则存放第一个有数组的元素的下标,相当于单链表中的头结点作用;
- 一个数据的 游标 指向下一个数据的 下标;
静态链表的插入操作:
我们前面说过,在动态链表中,结点的申请和释放分别借用C语言的 malloc() 和 free() 两个函数来实现动态的开辟空间;
在静态链表中,操作的是数组,不存在像动态链表的结点申请和释放的问题,所以我们需要自己实现这两个函数,才可以做到插入和删除;
为了辨明数组中哪些分量违背使用,解决的办法就是将所有未被使用过的及已被删除的用有表链成一个备用链表,应该如何操作呢?
如下:
优点:
- 在插入和删除操作时,只需要修改游标,不需要移动元素,从而改进了在顺序存储结构中的插入和删除操作需要移动大量元素的缺点;
缺点:
- 没有解决连续存储分配 ( 数组 ) 带来的表长难以确定的问题;
- 失去了顺序存储结构随机存取的特性;
总的来说,静态链表其实是为了给没有指针的编程语言设计的一种实现单链表功能的方法;
尽管我们可以用单链表就不用静态链表了,但这样的思考方式是非常巧妙的,应该理解其思想,以备不时之需;