从有序表中删除重复值保留一个用c语言实现
时间: 2024-10-03 08:04:35 浏览: 36
在C语言中,我们可以使用一个简单的数组或者链表结构来去除有序表中的重复元素并保持一个。这里我们先假设数组作为数据结构。以下是使用C语言的一个基本示例,演示如何遍历数组并删除重复项:
```c
#include <stdio.h>
// 定义结构体表示有序表中的元素
typedef struct {
int value;
int index; // 用于记录元素在原数组中的位置
} UniqueElement;
// 比较两个元素是否相等
int compare(const void *a, const void *b) {
return ((UniqueElement *)a)->value - ((UniqueElement *)b)->value;
}
// 删除重复元素并保留一个
void removeDuplicates(int arr[], int n) {
// 创建一个新的数组,大小为n,初始全部设为0,用于存储去重后的结果
UniqueElement unique[n];
int unique_count = 0;
// 使用qsort对原数组进行排序
qsort(arr, n, sizeof(int), compare);
for (int i = 0; i < n; i++) {
// 如果当前元素是第一个或者比前一个大,则添加到新数组并更新索引
if (i == 0 || arr[i] != arr[i - 1]) {
unique[unique_count].value = arr[i];
unique[unique_count++].index = i;
}
}
// 输出去重后的结果
printf("去重后数组: ");
for (int i = 0; i < unique_count; i++) {
printf("%d (%d)", unique[i].value, unique[i].index);
}
}
int main() {
int arr[] = {1, 2, 2, 3, 4, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
removeDuplicates(arr, n);
return 0;
}
```
在这个例子中,`compare()` 函数用于排序,`removeDuplicates()` 函数则遍历已排序的数组并检查重复。注意,这个实现仅适用于升序排列的整数数组。
阅读全文