![数据结构(C语言实现)](https://wfqqreader-1252317822.image.myqcloud.com/cover/699/43806699/b_43806699.jpg)
2.2.2 顺序表的基本运算
顺序表的基本运算如下(以下算法的实现保存在文件“SeqList.h”中)。
(1)顺序表的初始化。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/29_01.jpg?sign=1739531151-lBmIMyQ2DHqcIz80m9b0lvaf4aOhiwgI-0-e7a10dc04e2cc9dd83de745a5934ed3d)
(2)判断顺序表是否为空。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/29_02.jpg?sign=1739531151-olgTZXe96ooIZeLJvRzUONdrWibPIH9K-0-829283a237ba69f8728522aa0d90c130)
(3)按序号查找操作。查找操作分为两种:按序号查找和按内容查找。按序号查找就是查找顺序表L中的第i个元素,如果找到将该元素值赋值给e。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/29_03.jpg?sign=1739531151-iQeuYFa87F64TBeOW95jcLIZmGDJXLNB-0-515a360d1cc8f4e269ea531ae68ac93f)
(4)按内容查找操作。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/29_04.jpg?sign=1739531151-F3RFX8pHImEgp2DoTRauMlLDuF8v3610-0-c6280dcf7afa226da52ca92a8b68fca1)
(5)插入操作。插入操作就是在顺序表L中的第i个位置插入新元素e,使顺序表{a1,a2,…,ai-1,ai,…,an}变为{a1,a2,…,ai-1,e,ai,…,an},顺序表的长度也由n变成n+1。
【算法思想】要在顺序表中的第i个位置上插入元素e,首先需将表中位置为n,n-1,…,i上的元素依次后移一个位置,将第i个位置空出,然后在该位置插入新元素e。当i=n+1时,是指在顺序表的末尾插入元素,无需移动元素,直接将e插入表的末尾即可。
例如,要在顺序表{3,15,49,20,23,44,18,36}的第5个元素之前插入一个元素22,需要为36,18,44,23依次向后移动一个位置,然后在第5号位置插入元素22,顺序表就变成了{3,15,49,20,22,23,44,18,36},如图2.4所示。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/30_01.jpg?sign=1739531151-BG44JJAV5qoBFLne3EFFUX1sGsT0dMdq-0-ff4af2bcd93c975d7486ea4307436989)
图2.4 在顺序表中插入元素22的过程
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/30_02.jpg?sign=1739531151-aYbxlMZw16bhuhtcuEvVo7eY9q8rIUPE-0-8f916e716bab2207cfcbef8a2fa8cca7)
在执行插入操作时,插入元素的位置i的合法范围应该是1≤i≤L->length+1。当i=1时,插入位置是在第一个元素之前,对应C语言数组中的第0个元素;当i=L->length+1时,插入位置是最后一个元素之后,对应C语言数组中最后一个元素之后的位置。当插入位置是i=L->length+1时,不需要移动元素;当插入位置是i=0时,则需要移动所有元素。
注意:插入元素之前要判断插入位置是否合法,另外还要判断顺序表的存储空间是否已满,在插入元素后要将表长增加1。
(6)删除操作。删除操作就是将顺序表L中第i个位置的元素删除,使顺序表{a1,a2,…,ai-1,ai,ai+1,…,an}变为{a1,a2,…,ai-1,ai+1,…,an},顺序表的长度也由n变成n-1。
【算法思想】为了删除顺序表中的第i个元素,需要将第i+1个位置之后的元素依次向前移动一个位置,即先将第i+1个元素移动到第i个位置,再将第i+2个元素移动到第i+1个位置,依次类推,直到最后一个元素移动到倒数第二个位置。最后将顺序表的长度减1。
例如,要删除顺序表{3,15,49,20,22,23,44,18,36}的第4个元素,需要将序号为5,6,7,8,9的元素依次向前移动一个位置,这样就删除了第4个元素,最后将表长减1。如图2.5所示。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/31_01.jpg?sign=1739531151-L9k9P89gewTMiFFw58GCvFdcsUmI6sHd-0-e7f91a4dbecfc6d4c295613a5e0de579)
图2.5 在顺序表中删除元素20的过程
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/31_02.jpg?sign=1739531151-LHlYc39KFSRu3q64I20ClXGbfDFsECC3-0-6432139b3d0dffc12e3c392e23592292)
删除元素的位置i的合法范围应该是1≤i≤L->length。当i=1时,表示要删除第一个元素(对应C语言数组中下标为0的元素);当i=L->length时,表示要删除的是最后一个元素。
注意:在删除元素时,首先要判断顺序表中是否还有元素,另外,还需要判断删除的序号是否合法。删除成功后,将顺序表的长度减1。
(7)求顺序表的长度。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/31_03.jpg?sign=1739531151-vxugLMA56EypLsnxdwBRLYLR4x9s6F8P-0-9864e063750436e5b43abb7fdf5f6f5e)
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/32_01.jpg?sign=1739531151-Du3RSSYvPqfWXikAUm6QojYvPQATQfpX-0-aa20e67ae8630007647a4699151971a6)
(8)清空顺序表。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/32_02.jpg?sign=1739531151-60LFX88KF75QyoX8WEcBraIOBzIh74pr-0-434585c5af461e03e9bbf9bfbaaf2904)