1.顺序表的定义
在数据结构中顺序表分为静态表和动态表。静态表顾名思义是不能改变大小的顺序表,通常由静态数组和有效数据组成,如图一

图一
因其不能改变数组大小导致数组定义大了会浪费空间,定义小了会导致空间不足。动态表通常由动态数组和有效数量和数组长度组成。如图二

2.顺序表的增删查改
2.1顺序表的初始化
静态表和动态表的实现代码大同小异所以在这里我们所以动态表来实现,动态表的初始化需要为数组申请空间以及对数组大小和有效数据大小进行赋值。时间复杂度为o(1)。如图三

图三
2.2顺序表的头删尾删
2.2.1头删
头删是删除数组的第一个元素因而只需要让数组元素向前运动一位就行,第一个元素直接覆盖就可以了。这里需要注意的是需要保证顺序表的指针不为空而且数组的有效数据数不能为0。时间复杂度为o(n)。如图四

图四
2.2.2尾删
尾删的实现较为简单只需要保证表的指针不为空以及有效数据大于0就够了,因为在后续操作时当前size位置的数据都不会影响操作,当后续进行插入操作时新插入的数据会直接覆盖当前size位置的元素,因而尾插只需要size--。时间复杂度为o(1)。如图五

图五
2.3头插尾插
2.3.1头插
头插和头删很相似,头删是让数组元素向前移动而头插是让数组元素向后移动,然后再在数组头插入元素。插入操作有一个关键的点在于数组的增容,因为插入操作都需要增容,所以我们需要单独写出一个函数来实现数组的增容。这么做的目的是减少重复代码量,时间复杂度为o(1)和o(n)。如图六,七。

图六(数组增容)

图七
2.3.2尾插
尾插相较于头插是比较简单的只需要在size位置插入一个数据就行了。时间复杂度为o(1)。如图八

图八
2.4在任意位置前插入
在任意位置前插入其实和头插差不多,只不过头插需要把原数组的全部元素都向后移动,这个需要把pos位置及其以后的元素向后移动,然后在pos位置插入数据。有两种极端情况(1)pos=0,这时相当于头插。(2)pos=size,相当于尾插。所以时间复杂度为o(n)。如图九

图九
2.5删除指定位置元素
删除指定位置元素和头删差不多,只不过头删是移动全部的元素,而这个只需要移动指定位置及其以后的元素覆盖指定位置元素即可。值得注意的是pos不能小于0也不能大于size-1。时间复杂度为o(n)。如图十

图十
2846

被折叠的 条评论
为什么被折叠?



