对长度为 n 的顺序表L,编写一个时问复杂度为 O(n)、空间复杂度为 O(1)的算法,该算法删除线性表中所有值为 x 的数据元素。
#include<stdio.h>
#include<stdlib.h>
#define Max 100
struct SqList{
int a[Max] = {66, 33, 66, 11, 66, 0, 22, 88, 99, 66};
int length = 10;
};
void delete_X(SqList &s, int x){
int count = 0;
for(int i = 0; i < s.length; i++){
if(s.a[i] == x){
// 记录当前值为 x 的元素个数
count++;
}
else{
// 将 值为 非 x 的元素 替换 值为 x 的元素
s.a[i - count] = s.a[i];
}
}
// 更新顺序表的长度
s.length = s.length - count;
}
// 打印顺序表
void show(SqList s){
for(int i = 0; i < s.length; i++){
printf("%d ", s.a[i]);
}
printf("\n");
}
int main(){
SqList s;
printf("删除前:");
show(s);
delete_X(s, 66);
printf("删除后:");
show(s);
return 0;
}