用C语言编写一段程序:假设一个线性表采用顺序表表示,删除其中所有值等于X的元素(两种方法)
时间: 2023-06-14 07:04:31 浏览: 109
方法一:暴力删除
```c
#include <stdio.h>
#define MAXSIZE 100 // 假设顺序表的最大长度为100
typedef struct {
int data[MAXSIZE];
int length;
} SqList; // 定义顺序表结构体
void del_x1(SqList *L, int x) {
int i, j;
for (i = 0; i < L->length; i++) {
if (L->data[i] == x) {
for (j = i; j < L->length - 1; j++) {
L->data[j] = L->data[j+1];
}
L->length--;
i--; // 注意这里的i--,因为元素往前移了一个位置
}
}
}
int main() {
SqList L = {{1, 2, 3, 4, 3, 5, 6}, 7}; // 初始化一个顺序表
int x = 3;
printf("Before deletion:\n");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
del_x1(&L, x); // 删除值为x的元素
printf("After deletion:\n");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
return 0;
}
```
方法二:快慢指针
```c
#include <stdio.h>
#define MAXSIZE 100 // 假设顺序表的最大长度为100
typedef struct {
int data[MAXSIZE];
int length;
} SqList; // 定义顺序表结构体
void del_x2(SqList *L, int x) {
int i, j;
for (i = 0, j = 0; i < L->length; i++) {
if (L->data[i] != x) {
L->data[j] = L->data[i];
j++;
}
}
L->length = j;
}
int main() {
SqList L = {{1, 2, 3, 4, 3, 5, 6}, 7}; // 初始化一个顺序表
int x = 3;
printf("Before deletion:\n");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
del_x2(&L, x); // 删除值为x的元素
printf("After deletion:\n");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
return 0;
}
```
阅读全文