顺序表删除元素 - 人邮DS(C 第2版)线性表习题2(10) 分数 30 已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。 输入格式: 第一行为无序整数集合的长度,第二行为无序整数集合,第三行为删除的值。 输出格式: 第一行为删除元素后新的无序整数集合的长度,第二行为新的整数集合。 输入样例: 7 1 9 2 9 3 9 4 9 输出样例: 4 1 2 3 4
时间: 2024-02-22 10:56:10 浏览: 49
以下是一种时间复杂度为O(n)、空间复杂度为O(1)的算法,可以删除顺序表中所有值为item的数据元素:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE]; // 顺序表的存储数组
int length; // 顺序表的长度
} SeqList;
void deleteElement(SeqList *list, int item) {
int i, j;
for (i = 0, j = 0; i < list->length; i++) {
if (list->data[i] != item) {
list->data[j] = list->data[i];
j++;
}
}
list->length = j;
}
int main() {
SeqList list;
int n, item;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &list.data[i]);
}
scanf("%d", &item);
list.length = n;
deleteElement(&list, item);
printf("%d\n", list.length);
for (int i = 0; i < list.length; i++) {
printf("%d ", list.data[i]);
}
printf("\n");
return 0;
}
```
首先输入顺序表的长度和数据元素,然后输入需要删除的值item,接着调用deleteElement函数删除顺序表中所有值为item的数据元素,最后输出新的顺序表的长度和数据元素即可。