![数据结构(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=1739533178-NSoUpC2FAnndtE3T1vafjVhjgZ30bRL6-0-572391d078fc4854509bfffc6cb52cb7)
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_01.jpg?sign=1739533178-IJRBMjS8KsRIr9ByovT9LeiIikiH3XcY-0-bc344096949cbf71494a8efd112fdbe9)
(2)分配结点。分配结点就是要从备用链表中取下一个结点的空间,分配给要插入链表中的元素,返回值为要插入结点的位置。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_02.jpg?sign=1739533178-2UxXgp7uiIdNpuGAIY9vzjDFmbP3ci2F-0-ec02ef0358ea64766faf4cd0080f50aa)
(3)回收结点。回收结点就是将空闲的结点回收,使其称为备用链表的空间。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_03.jpg?sign=1739533178-mkqobluGe76uNMUaa3L4YPHQlxdmQgFe-0-f37078805a6c82ad575b83d09fa677bc)
(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=1739533178-HCh4hXilhfat34eduEWah9C0AbckkS25-0-0e579a4f762c8ad96749c720acf5d6ef)
图2.34 在静态链表中插入元素后
插入操作的算法描述如下。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_05.jpg?sign=1739533178-oRgQpuQVeG5hmsb0rWeV4EpkyvtY2FIm-0-b4a79df8d3a324ba35cd43558ef3b349)
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/55_01.jpg?sign=1739533178-Z1zF8DB7tFtL1rNTzg9D87kOanBW8zf0-0-6023fe78e40113b0a89f2ddc25873b38)
(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=1739533178-FYRc3eHzV6AGg90JfeGiYR9zXNsDI8KT-0-f988bf73c7c6ecb534c185f9ee784d13)
图2.35 删除静态链表的第3个结点
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/55_03.jpg?sign=1739533178-Ane1RTYfwNP1K7lR7yz30TSSYtFkJHgy-0-734463674e6e305d17bad7390a1340f6)