1.顺序表的定义
在介绍顺序表之前,我们先来了解一下线性表。线性表,顾名思义,就是n个具有相同特性的数据元素的有序序列。在逻辑上,我们可以把线性表想象成一条连续的线段,线段上有很多个点。因此,线性表是一个比较简单和基础的数据结构。那么顺序表,就是将线性表顺序存储起来。有人可能会问,这不就是用一个数组把这些元素存储起来吗?没错,顺序表就是通过数组来实现的。
2.顺序表的模拟实现
①创建顺序表:首先我们需要创建一个足够大的数组来充当顺序表,同时还需要一个变量用来标记顺序表当前有多少个元素。代码如下:
②添加元素------尾插:尾插,顾名思义,就是在元素后面插入新的元素,上面我们创建的是一个空的顺序表,n表示元素的总个数,此时n的值为0(因为n定义为全局变量)。通常我们规定从下标为1的位置开始插入元素,因此,我们得先让n++(此时n的值为1),再让该位置赋值成我们所要插入的值。代码如下:
③添加元素------头插:头插,也就是要在顺序表表头前面添加元素。假设此时顺序表内已经存有2,5,1,3这四个数,我们想在2的前面插入一个数字10,该怎么做呢?有人可能会想到,之前不是把下标为零的位置空出来了吗,那我直接让a[0]=10不就行了吗?这样想的确没什么问题,但我如果 又要在10的前面在插入新元素,你不就炸了吗?(数组越界访问了)因此,我们需要新的解决办法。我们可以先让表中所有元素统一向后移动一位,再把10插入到a[1]这个位置就可以了,同时别忘了n++(添加新元素后,元素总个数加一)。代码如下:
④添加元素------任意位置插入:如果我们想在位置p处插入一个数,该怎么实现呢?原理和上面的头插操作很类似,只不过这次是把[p,n]区间内的元素统一向后移动,再把这个数插入到p坐标,同时别忘了n++。代码如下:
⑤ 删除元素------尾删:所谓尾删,就是删除顺序表的表尾元素。例如,我现在有一组数,10,2,5,1,3,现在想把3这个数删掉,该怎么做呢?其实很简单,我们只需要让n--就可以了。因为n表示顺序表中有效元素的个数,我们让n--之后,n就指向1这个数,我们接下来在遍历这个顺序表的时候,就遍历不到3这个数了,也就实现了3这个数的删除操作。代码如下:
⑥删除元素------头删: 想要删除表头的元素,我们只需要把[2,n]区间内所有的元素统一左移一位就可以了,然后让总个数n减一。代码如下:
⑦删除元素------任意位置删除:删除p位置的元素,和头删操作类似,只不过是把区间[p+1,n]所有的数统一向左移动一位即可,再让n--。代码如下:
⑧查找元素-------按值查找:我们现在要查找顺序表中数字x存储的位置,该如何实现呢?其实非常简单,我们只需要从前往后依次扫描顺序表,判断各个下标处的值是否等于我们要找得数,如果是,就返回这个下标,如果没有找到,就返回0就可以了(因为我们规定0位置处不存储任何数值)。代码如下:
⑨查找元素------按位查找:返回顺序表中p位置处的值,这个特别简单,我就不过多赘述了,直接看代码吧:。同时,按位查找也体现了顺序表“随机存取”的特性,只要你给我一个下标,我就能快速访问到这个下标位置的元素。
⑩修改元素:修改p位置处的值,将其改为x。这一操作同样也体现了顺序表随机存取的特性,代码实现也同样很简单:
3.小结
以上就是顺序表的全部内容啦,下一章vector不见不散,拜拜。