对长度为n的顺序表L,编写一个时间复杂度为O(n),空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。
# include <stdio.h>
#define MaxSize 10
typedef struct{
int data[MaxSize];
int length;
}SqList;
void InitList(SqList &L){
for(int i=0; i<MaxSize; i++){
L.data[i]=0;
}
L.length=0;
}
void PrintList(SqList L){
for(int i=0; i<L.length; i++){
printf("%d ",L.data[i]);
}
}
//开始写主功能函数
void DeleteX(SqList &L, int x){
int k = 0;
for(int i=0; i<L.length; i++){
if(L.data[i]==x){
k++;
}
else{
L.data[i-k]=L.data[i];//不为x的元素向前移动k个位置
}
}
L.length=L.length-k;
}
int main(){
printf("SqList_Test_3_From_soapcmd\n\n");
//打印标题
SqList L;
//声明顺序表
InitList(L);
//初始化顺序表
L.data[0] = 12;
L.length++;
L.data[1] = -11;
L.length++;
L.data[2] = 23;
L.length++;
L.data[3] = -4;
L.length++;
L.data[4] = -11;
L.length++;
L.data[5] = 9;
L.length++;
L.data[6] = -11;
L.length++;
//插入几个数据
PrintList(L);
//打印更改前顺序表
printf("\n");
//开始删除
int x = -11;
DeleteX(L, x);
PrintList(L);
//打印更改后顺序表
return 0;
}
如图,将不等于x的元素向前移动k(目前x的数量)个位置
1 2 3表示移动顺序