删除顺序表中值为x的元素
描述:
对长度为L的顺序表,编写一个时间复杂度为0(n),空间复杂度为0(1)的算法,该算法删除线性表中所有值为x的数据元素。
算法思想:
定义一个计数变量K,用于记录顺序表中值为x的数据元素的个数,方便后续统计删除之后的顺序表长。若遍历数据元素不等于x,把该元素前移一位。
#include<stdio.h>
#define maxsize 50
typedef struct {
int Data[maxsize];
int Length;
}SqList;
bool Delete_x(SqList &, int);
int main()
{
SqList a;
int x;
printf("请输入数据表长度(不超过50)\n");
scanf_s("%d", &a.Length);
printf("请输入%d个数据\n",a.Length);
for (int i = 0;i<a.Length; i++) {
scanf_s("%d", &a.Data[i]);
}
printf("请输入要删除的数据\n");
scanf_s("%d", &x);
Delete_x(a, x);
for (int i = 0; i < a.Length; i++) {
printf("%d ", a.Data[i]);
}
return 0;
}
bool Delete_x(SqList &L, int x) {
int k = 0, i = 0;
while (i <= L.Length) {
if (L.Data[i] == x) {
k++;
}
else {
L.Data[i - k] = L.Data[i];
}
i++;
}
L.Length -= k;
return true;
}
输入:
5
1 2 3 4 4
4
输出:
1 2 3