![数据结构(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=1738883830-FMKTWQ8sVsP5u1qGpZyqTTsEUseJUt3P-0-666e77f0b3eec41dfa39c7c413405c5e)
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_01.jpg?sign=1738883830-jicQsjm8UAG1HRzIlHdtl6B69y8dbA5v-0-f04918b2f4b5bd8f5d7e25c41146070e)
(2)分配结点。分配结点就是要从备用链表中取下一个结点的空间,分配给要插入链表中的元素,返回值为要插入结点的位置。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_02.jpg?sign=1738883830-oxX4QSLPRA7VWWjCETzg5T70NDXy7DkZ-0-a03e9ad6d766fe29a3a2189b8888c2eb)
(3)回收结点。回收结点就是将空闲的结点回收,使其称为备用链表的空间。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_03.jpg?sign=1738883830-YLDXLzP9Inm6htFnn2Vti7XaXomXibsK-0-b1cea0dacf2933000c624dc90d2112f5)
(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=1738883830-Bve4yFXUlgT3niFI5YMFfGIfkv6pZ4gE-0-1ef129639c0c21bcbc490ddd3452eb80)
图2.34 在静态链表中插入元素后
插入操作的算法描述如下。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/54_05.jpg?sign=1738883830-lMNriY57MhaJe0eE12qr2wjEN28WjNWg-0-bd4c6385d853519e2fda57b755a47397)
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/55_01.jpg?sign=1738883830-BTlnDpP5Fj42fKKFP78vePNYTsYtY2JP-0-7b3a9a7c9eb7fb8d0cefc6fed470cc92)
(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=1738883830-WUn4WfcTsyKfSKGlgMl0tFHe8QoyBAZc-0-0f43af8c55073fda251ba29eafd8b9fb)
图2.35 删除静态链表的第3个结点
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/55_03.jpg?sign=1738883830-OPgo5AYMAp2XhPs63Fe9gu1vEKmUL8VA-0-c1cee95036cc634b2067a74f286b289f)