已知长度为n的线性表A采用顺序储存结构,请写出一个时间复杂度为O(n)的算法,该算法可删除线性表中所有值为item的数据元素。用c语言编写
时间: 2024-10-09 08:04:16 浏览: 29
已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同)
在C语言中,可以使用一个循环遍历的方式来删除线性表中所有值为`item`的数据元素,这个操作的时间复杂度确实为O(n),因为每个元素都需要检查一次是否需要删除。下面是一个简单的示例:
```c
#include <stdio.h>
void deleteAllItems(int A[], int n, int item) {
int i = 0;
for (i = 0; i < n - 1; i++) { // 注意不要访问数组越界
if (A[i] != item) {
A[i + 1] = A[i]; // 如果当前元素不是item,就将它移到下一个位置
}
}
if (A[n - 1] != item) { // 检查最后一个元素是否也需要删除
A[n - 1] = 0; // 或者设置成其他结束标志,这里假设用0表示空
} else {
n--; // 如果最后一个元素也是item,则缩小数组长度
}
}
int main() {
int A[] = {1, 2, 3, 4, 5, 2, 6, 2}; // 假设这是你要处理的数组
int n = sizeof(A) / sizeof(A[0]);
int item = 2;
printf("Original array: ");
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
deleteAllItems(A, n, item);
printf("\nArray after deletion of all '2': ");
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
return 0;
}
```
在这个例子中,函数`deleteAllItems`会遍历数组,每次遇到`item`则跳过,否则将其移动到已扫描过的元素之后。最后更新数组的长度,使其只包含非`item`的元素。
阅读全文