算法思想:使用一个变量统计遍历时x出现的次数k,后续遇到不是x的元素则往前移动k个位置,即a[i-k]=a[i],记得顺序表长度相应-k
代码:
#include<iostream>
using namespace std;
#define Max 50 //定义全局变量不需要等号和分号
struct Sqlist {
int a[Max] = {1,2,3,1,5,1,7,8};
int length = 8;
};
void print(Sqlist s) {
if (s.length) {
for (int i = 0; i < s.length; i++)
cout << s.a[i] << " ";
}
cout << endl;
}
bool delX(Sqlist &s,int x) {
if (s.length == 0)return false;
int k = 0; //记录x出现的次数
for (int i = 0; i < s.length; i++) {
if (s.a[i] == x)k = k + 1;
if (s.a[i] != x && k != 0) s.a[i - k] = s.a[i];
}
s.length = s.length - k;
return true;
}
int main() {
Sqlist s;
cout << "删除前";
print(s);
delX(s, 1);
cout << "删除后:";
print(s);
}
结果