给出c代码:已知长度为 n 的线性表 A 采用顺序存储结构,请写一时间复杂度为 O(n) 、空间复 杂度为 O(1) 的算法,该算法删除线性表中所有值为 item 的数据元素。
时间: 2024-09-22 15:10:24 浏览: 96
数据结构课件:第2章 线性表3习题.pptx
在C语言中,你可以通过遍历整个顺序存储的线性表A,来实现这个删除操作。下面是一个简单的示例:
```c
#include <stdio.h>
void removeDuplicates(int* A, int n, int item) {
// 遍历数组
for (int i = 0; i < n - 1; i++) {
// 如果当前元素等于item并且下一个元素也等于item,则只保留下一个
if (A[i] == item && (i + 1 < n && A[i + 1] == item)) {
A[i] = A[i + 1]; // 移动下一个元素到当前位置
} else if (A[i] == item) { // 只有一个item的情况
A[i] = A[i + 1]; // 跳过item
}
}
}
// 示例数组和值
int main() {
int A[] = {1, 2, 3, 4, 5, 4, 3, 2, 1};
int n = sizeof(A) / sizeof(A[0]);
int item = 4;
printf("Original array:\n");
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
removeDuplicates(A, n, item);
printf("\nArray after removing duplicates of %d:\n", item);
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
return 0;
}
```
在这个例子中,`removeDuplicates`函数的时间复杂度是O(n),因为它需要检查每个元素一次。空间复杂度为O(1),因为我们只修改了原始数组本身,而没有额外创建新的数据结构。
阅读全文