问题:从顺序表中删除其值在给定值s与t之间(当然要求是s<t)的所有元素,如果s或t不合理或者顺序表为空则显示错误信息并退出运行 。
分析:问题的难点是如果我们每判断一个就删除一个,那样那些不属于这个区间中的元素要移动很多次,这样就效率就很低。
有什么办法可以是要删除的元素一起删除呢?
解决方法:我是通过一个变量k来存储符合这个区间的元素的个数。
1.如果碰到的是符合这个区间的元素,就让k++
2.如果碰见的是不在这个区间中的元素,就让这个元素就向前移动k过位置。
举例说明一下
s=3, t = 5;
数组为2,4 3,6,5,4,1,5
删除在3-5之间的数字
2 4 3 6 5 4 1 5
k=0 k=1 k=2 k=2 k=3 k=4 k=4 k=5
2 a[3 - k]=a[3] a[6-k]=a[6]
最好的数据就是
2 , 6, 1
至于后面的其他数据我们可以通过改变数据的长度,或者把后面的数据统一覆盖一下就可以了。
程序: