静态链表可以给没有指针的编程语言设计一种实现单链表功能的方法。思想非常巧妙。其每个数组中的元素结构是由数据域data
和游标cur
组成,数据域
就是需要存放的数据,游标
相当于单链表中的 next 指针。cur中存放该元素的后继在数组中的下标
。这种数组描述的链表叫做静态链表。
静态链表必须满足下面两个规则:
- 数组的第一个元素,即下标为0的元素的cur就存放备用链表的第一个结点的下标。
- 数组的最后一个元素的 cur 则存放第一个有数值的元素的下标,相当于单链表的头节点作用,当整个链表为空时,则为0,表示无指向。
如下图,cur
代表存放后继元素在数组中的下标。第 0 个下标的元素的 cur
存放备用链表的第一个节点的下标。最后一个元素的 cur
存放第一个有数值元素的下标。这样就构成一个链式存储结构。
现在在已、丁之间插入丙元素。需要将已的 cur
改为 7,丙的 cur
改为 3。这时候,链表中的头的 cur
就应该改为 8。如下图:
如果现在需要删除甲,那么甲处于的位置为空,如果有新的元素待插入,那么此位置将会优先考虑。所以删除的位置称为第一个优先空位。即首元素 cur
为1,末尾元素 cur
为 2。而游标为 2 的位置(参考上图)则指向下一个备用链表下标,即为 8。修改后的链表如下图所示。
1 |
|
静态链表的优缺点:
优点:
- 在插入和删除操作时,只移动游标,不需要移动元素。改变了在顺序存储结构中的插入和删除需要移动大量元素的缺点。
缺点: - 失去了顺序存储结构随机存取的特性。
- 没有解决连续存储分配(数组)带来的表长难以确定的问题。
参考
《大话数据结构》