线性表之顺序存储(二)
上一篇讲了顺序表的初始化和倒序输出,现在来讲一讲顺序表的插入和删除操作。
首先关于顺序表的插入和删除,我们都会想到这两个操作一定涉及数据的移动,那么我们该如何移动数据呢?是从前往后?还是从后往前?还是都可以呢?大家可以简单思考一下。
顺序表的插入
插入(Insert)是数据结构中十分重要的几种操作之一,我们可以从顺序表这个简单的结构中学到一些插入的细节问题。
插入应该如何插入呢?我们首先得由一个顺序表,其次我们得知道我们插入的位置在哪,还有就说插入的值是多少,这就是插入需要的三个参数。
我们该怎样插入呢?第一点就是插入的位置得合法:让我来举个例子吧,就像一个电影院,人人都有自己的座位号,当电影院坐满了人,座无虚席,哈!这样你也想去看这场电影,然后去买票,那么你说售票员会卖给你票么?当然不会,因为此时电影院已经满了没有座位了呀!再举个例子,还是在电影院,电影院的座位一般都是从1开始往后排序的,但是你和售票员说,我要一个“0”号座位,你说他会拿票给你嘛?就算他想拿票给你但是实际上也没有这个座位呀~这两个例子都说出了插入首先得注意的一个问题,你插入的位置要合法,不能超出此刻顺序表的长度+1,以及不能低于1。
还有你想啊,我们当时定义顺序表的时候有一个最大的存储长度,但是在我们插入数据之前,此时的顺序表已经达到最大的存储长度了,那我们应该如何去处理这种情况呢? 其实很简单,就用realloc函数重新开辟一个空间,再去插入数据。
既然位置都合法了,达到最大的存储长度我们也重新开辟了一段空间,那么接下来就到了我们最主要的环节了——数据的插入,我们**需要把最后一个元素往后移,然后之前的每一个数据依次往前重复相同的操作。**当我们移动到编号为add的元素时我们应该小心注意一下了,因为我们要插入的元素elme是要插入在第add号的,因为顺序表是从0开始的,所以我们插入的元素elme实际插入位置是在add-1,这点得特别注意!最后因为成功插入了一个元素,所以总长度length得加上1。
代码如下:
运行结果如下:
顺序表的删除(两种方法)
顺序表删除元素的主要方法就是按照位置来删除,下面的第二种方法是自己为了给自己测试才编写的。
按照元素位置删除
按元素位置删除的第一点也是要判断位置是否合法,然后还有一点就是要判断顺序表是否为空,因为顺序表为空就删除不了了,感觉像是和第一点有点交集,但我也单独拿出来说明吧,我就觉得挺重要的,下面给的代码没有写这部分,下篇博客再给补上。
插入和删除之前也讲过挺像的,就都进行了数据的移动,但是他们的移动方式却是截然不同,插入是从尾移动到插入点,而删除是从删除点移动到尾,这点大家得注意。
代码(没有判空):
运行结果如下:
按照元素的值删除(把从头到尾第一个和所给的元素值相同的值删除)
这部分其实就是按照元素位置删除的变形,多了一点内容罢了,就你需要先遍历一下顺序表,一旦找到和所给值相同就跳出循环,记下他的数组编号,然后就是和按照元素位置删除一样的操作了。
代码如下:
运行结果:
主函数如下:
这是自己的一点学习笔记,希望自己能够慢慢学,然后慢慢写下去,最后感谢观看,有说错的地方欢迎指正。