设一个有序表采用顺序表存储。设计一个高效算法删除重复的元素。如L=(1,1,2,2,2,3),结果为L=(1,2,3)c语言实现
时间: 2024-09-08 07:02:29 浏览: 40
为了高效地从有序顺序表中删除重复元素,可以使用一个双指针技巧。一个指针用于遍历顺序表,另一个指针用于记录不重复元素的位置。遍历过程中,比较当前元素与前一个不同元素,如果不同,则将其复制到不重复元素的位置,并将不重复元素的位置指针向前移动。这种方法的时间复杂度为O(n),空间复杂度为O(1)。
以下是C语言实现的示例代码:
```c
#include <stdio.h>
// 函数用于删除有序顺序表中的重复元素
void removeDuplicates(int arr[], int n) {
if (n == 0) return; // 空数组直接返回
int j = 0; // 不重复元素的位置
for (int i = 1; i < n; i++) {
if (arr[i] != arr[j]) {
j++;
arr[j] = arr[i]; // 复制不重复元素到新位置
}
}
// j+1 就是新数组的长度
for (int i = 0; i <= j; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int L[] = {1, 1, 2, 2, 2, 3}; // 给定的有序顺序表
int n = sizeof(L) / sizeof(L[0]); // 数组长度
removeDuplicates(L, n); // 调用函数删除重复元素
return 0;
}
```
当运行上述代码时,它将输出:
```
1 2 3
```
这表明原数组中的重复元素已经被成功删除。
阅读全文