1、设计一个高效的算法。从顺序表L中删除所有介于x和y之间的所有元素,要求空间复杂度为O(1)
部分函数调用参考:https://blog.csdn.net/qq_50504109/article/details/120273546
/**
* 删除掉介于x和y的元素,其实跟删除一个确定的值是一样的
* i和j在没有遇到符合条件的元素的时候,一起移动,相互赋值,要是遇到符合条件的元素的时候,只需要j继续往前走,
* 直到遇到不符合条件的,这个时候由于会先进性赋值,因此不符合条件的就会被覆盖,反复重复就可以删除掉所有不符合条件的元素啦
*/
#include<stdio.h>
#include"InstanceLinearList.c"
int main(){
LinearList1 L = creatLinearList();
void DelBetweenxAndyOfValue( LinearList1 L,int x ,int y);
insert(L,1,1);
insert(L,3,2);
insert(L,7,3);
insert(L,10,4);
insert(L,13,5);
insert(L,18,6);
insert(L,30,7);
insert(L,25,8);
insert(L,20,9);
printf("删除前:");
dispaly(L);
DelBetweenxAndyOfValue(L,2,16);
dispaly(L);
}
void DelBetweenxAndyOfValue( LinearList1 L,int x ,int y){
int i = 0,j = 0;
while(i <= L->last){
if ( (L->elem[i] > x) && (L->elem[i] < y)){
i++;
}else{
L->elem[j] = L->elem[i];
i++;
j++;
}
}
L->last = j-1;// 慢的减1
}