法一:
#include<stdio.h>
#define maxsize 10
typedef struct
{
int data[maxsize];
int length;
}sqlist;
void Del(sqlist& l, int x)
{
int i = 0,k = 0;
for (i = 0; i < l.length; i++)
{
if (l.data[i] != x)//判断每个值是不是要删除的元素,如果不是就保留
{
l.data[k] = l.data[i];
k++;//k相当于把这个顺序表重新利用
}
}
l.length = k;
}
int main()
{
int j = 0;
sqlist L = { {1,2,3,2,4,2},6 };
Del(L, 2);
while (j < L.length)
{
printf("%d ", L.data[j++]);
}
return 0;
}
法二:
#include <stdio.h>
#define maxsize 10
typedef struct
{
int data[maxsize];
int length;
}sqlist;
void Del(sqlist& L, int x)
{
int k = 0, i = 0;
for (i = 0; i < L.length; i++)
{
if (L.data[i] == x)
++k;
else
L.data[i - k] = L.data[i];//相当于每次把后面的元素往前覆盖
}
L.length -= k;//顺序表长度记得改变
}
int main()
{
sqlist L = { {1,2,3,2,4,2},6 };
Del(L, 2);
for (int i = 0; i < L.length; i++)
printf("%d ", L.data[i]);
return 0;
}