数据结构学习日志之三--静态链表

当链表每个节点在物理位置上是相邻的,即用数组描述的链表叫静态链表

假设S为静态链表,S[0].cur只是第一个结点在数组中的位置,若设i = S[0].cur,S[i].data存储静态链表中的第一个数据元素,S[i].cur表示第二个结点在数组中的位置。一般情况下,若第i个分量表示静态链表的第k个结点,则S[i].cur表示第k+1个结点在数组中的位置。以整型游标i代替动态指针,i = S[i].cur的操作实际上就是p = p->next

所以在静态链表实现定位的函数如下


静态链表的插入运算

首先我们定义一个数组容量为maxSize的数组,数组第一位是存放着空闲结点,最后一位为头结点。

如图以下


插入操作的流程是这样的,假如插入的位序在3和4之间,如果链表非空,实际上插入的位置会在物理位置上的最末端,像之前链表操作一样,先插入位置上的cur改为4,再把3.cur改为实际上插入的位置,。如图以下代码

首先我们要获取可插入结点的位置,每次获取后都需要更改可插入结点的位置


再进行插入操作


删除操作,像之前的链表也是一样,先获取要删除位置的前一个元素,直接更改他的后继指针为删除元素的后继指针,如果为第一个结点则修改头指针。代码如下,


最后我们释放空闲结点



总结:

优点:在删除和插入,只需要修改游标,不需要移动元素,减少了在顺序表中移动元素的时间。

缺点:失去了顺序存储结构随机存取的特性,没有解决连续分配存储空间带来的表长难以确定的问题

demo:https://github.com/chanbendong/DataStructure

猜你喜欢

转载自blog.csdn.net/chanbendong/article/details/79551822