![数据结构(C语言实现)](https://wfqqreader-1252317822.image.myqcloud.com/cover/699/43806699/b_43806699.jpg)
2.4.2 静态链表的实现
静态链表的基本操作如下(基本操作实现存放在“SLinkList.h”文件中)。
(1)静态链表的初始化。在初始化静态链表时,只需要把静态链表的游标cur指向下一个结点,并将链表的最后一个结点的cur域置为0。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/53_03.jpg?sign=1739172293-3wve8HqF0ljciZP5qwxbPjR8unAAH7Rv-0-8e3e1ec2aaaddb228b8b872850bb771d)
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_01.jpg?sign=1739172293-wAr2tyezIBAx25D2UqpBZVcx9DIpp7o6-0-3989ff84780fcf04058b820ed351b8f9)
(2)分配结点。分配结点就是要从备用链表中取下一个结点的空间,分配给要插入链表中的元素,返回值为要插入结点的位置。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_02.jpg?sign=1739172293-FUI4FodJc76apHdWJmBxXZvxaqMbr284-0-6b8c4ca762de3c7255868b5fee1c4704)
(3)回收结点。回收结点就是将空闲的结点回收,使其称为备用链表的空间。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_03.jpg?sign=1739172293-tiiuZMkvalzEdtbuo9zBe7n2GSGNiD6v-0-88aa290cdbb6bc4a6ac7819f3cd06931)
(4)插入操作。插入操作就是在静态链表中第i个位置插入一个数据元素e。首先从备用链表中取出一个可用的结点,然后将其插入到已用静态链表的第i个位置。
例如,要在图2.33的静态链表中的第5个元素后插入元素“Chen”。具体步骤是:
①为新结点分配一个结点空间,即静态链表的数组编号为8的位置,即k=L.av,同时修改备用指针L.av=L.list[k].cur。
②在编号为8的位置上插入一个元素“Chen”,即L.list[8].data="Liu"。
③修改第5个元素位置的cur域,即L.list[5].cur=L.list[8].cur,L.list[8].cur=6。
插入过程如图2.34所示。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_04.jpg?sign=1739172293-SzYJlvmKa2OHxD4fkpvABuR0JCD2qtK4-0-30204084882d44689031a41114a82350)
图2.34 在静态链表中插入元素后
插入操作的算法描述如下。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_05.jpg?sign=1739172293-ZKm5BG3FmKflleUEBCfGEcPbfYR5jkxh-0-47c058a26cef538510f75c90e0de8bfc)
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/55_01.jpg?sign=1739172293-z0LdRa9WPyEHm70RdBQ3e6xyc5GR8zn4-0-c3de693fd11f2431a03b8d32add0fc50)
(5)删除操作。删除操作就是将静态链表中第i个位置的元素删除。首先找到第i-1个元素的位置,修改cur域使其指向第i+1个元素,然后将被删除的结点空间放到备用链表中。
例如,要删除图2.33所示的静态链表中的第3个元素,需要根据游标找到第2个元素,将其cur域修改为第4个元素的位置,即L.list[2].cur=L.list[3].cur。最后要将删除元素的结点空间回收。删除结点操作如图2.35所示。
删除操作的算法描述如下。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/55_02.jpg?sign=1739172293-KKsYL5jotLXumZlHVit06uSBzLac27Z0-0-94a352db9c14a78f470da69fc3d66025)
图2.35 删除静态链表的第3个结点
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/55_03.jpg?sign=1739172293-CPJhXzYrf7vwjgjR3B02btDhIIzN2JwV-0-188cfcba34aa0ce448334ab5b2b28ef0)