已知长度为n的线性表A采用顺序存储结构,请用c语言写出一个时间复杂度为0(n) 的算法,该算法可删除线性表中所有值为item 的数据元素。(30分
时间: 2024-10-11 22:09:38 浏览: 39
C语言版数据结构基础学习
要在C语言中实现一个时间复杂度为O(n)的删除线性表中所有值为item的元素的算法,我们可以遍历整个数组并逐个检查元素。如果找到等于item的元素,就将其后面的元素向前移动一位。下面是相应的C语言代码:
```c
#include <stdio.h>
void deleteAll(int A[], int n, int item) {
// 遍历数组
for (int i = 0; i < n - 1; ++i) {
// 如果找到item,将后面的元素移到前面
if (A[i] == item) {
for (int j = i; j < n - 1; ++j) {
A[j] = A[j + 1]; // 移动元素
}
n--; // 减少数组长度,因为最后一个item已被移除
}
}
}
// 示例使用
int main() {
int A[] = {1, 2, 3, 4, 5, 2, 6, 2};
int n = sizeof(A) / sizeof(A[0]);
int item = 2;
deleteAll(A, n, item);
printf("删除项 %d 后的数组为: ", item);
for (int i = 0; i < n; ++i) {
printf("%d ", A[i]);
}
return 0;
}
```
此代码会删除数组A中所有值为item的元素,最后打印出更新后的数组。注意,这种方法不会释放内存,只是简单地改变了元素的相对位置。如果需要真正地减少数组大小,你需要重新分配内存。然而,这通常不是必要的,因为题目要求时间复杂度为O(n),所以只需遍历一次即可满足要求。
阅读全文