![数据结构(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=1739114688-HaJEvWme33zK8qaaom5Dw6FCYuknAT26-0-66cbf5115336d8379380d50826a86dc0)
(2)判断顺序表是否为空。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/29_02.jpg?sign=1739114688-4CHofTbqfAjGDUsyzk9B00imq48T6isU-0-ac791364ff896747d4efb35ecee105db)
(3)按序号查找操作。查找操作分为两种:按序号查找和按内容查找。按序号查找就是查找顺序表L中的第i个元素,如果找到将该元素值赋值给e。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/29_03.jpg?sign=1739114688-ImaGM9wfoWkJvOr1uJUpy0ZItgy0ECCZ-0-c6ffa67b45bf686b98c24a88465447d6)
(4)按内容查找操作。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/29_04.jpg?sign=1739114688-5kZMD8f7JZu669EsNGE4hsKalf8ZLuWz-0-c0d519beec0807431d1d9236257e51b5)
(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=1739114688-8CWSpAWpgwoZP0ldxfSf93sOBYX3Gu6V-0-c35bde31be1078f2587181fac9f6f993)
图2.4 在顺序表中插入元素22的过程
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/30_02.jpg?sign=1739114688-tOlpE0FHFA3CMJslgJfFmYATQ9gCjNBQ-0-3a37451169545a80e1819f2d4a026958)
在执行插入操作时,插入元素的位置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=1739114688-mLtbD01KM49eCf8o8dRv6xFrRDO0khrK-0-00d4adc8ee58cf840166b2d814b67a14)
图2.5 在顺序表中删除元素20的过程
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/31_02.jpg?sign=1739114688-av554nTEVsTClZkWf1YUgPbRYUvpalQy-0-0cdb9aee72943d553f9c7f76366ff0eb)
删除元素的位置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=1739114688-okfdUTBH6uduMeFNG4J6mcXJgnS2Bbta-0-3474827d6ae61f08a2f57235a6ac3f88)
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/32_01.jpg?sign=1739114688-IIMds8OQ776CT17Q7Kr1Y4I8SYAN0Dwo-0-87494cf1ca452532a5011888d721747f)
(8)清空顺序表。
![](https://epubservercos.yuewen.com/2EFA35/23083815801896206/epubprivate/OEBPS/Images/32_02.jpg?sign=1739114688-jMhGgELaiUnJzvQlu4GEBPzXQNgwiIG5-0-6436c1c13ece1452f14a907ab573062f)