用C语言删除顺序表的重复元素
时间: 2024-12-06 19:24:20 浏览: 15
在C语言中,你可以使用循环遍历和临时存储的方式来删除顺序表(数组)中的重复元素。这里有一个简单的示例,假设我们有一个整数数组`arr`和它的长度`n`:
```c
#include <stdio.h>
// 删除数组中的重复元素并返回新数组的长度
int removeDuplicates(int arr[], int n) {
if (n == 0) return 0; // 如果数组为空,直接返回0
int i, j;
for (i = 0, j = 0; i < n; i++) {
// 如果当前元素是第一次出现,或者比之前所有元素都大
if (arr[i] != arr[j] || i == j) {
arr[++j] = arr[i]; // 将非重复元素复制到新位置
}
}
// 返回新的有效索引
return j + 1;
}
// 测试代码
int main() {
int arr[] = {1, 2, 2, 3, 3, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
n = removeDuplicates(arr, n);
printf("New array with no duplicates: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这个程序的主要思想是使用两个指针`i`和`j`,`i`遍历整个数组,如果`arr[i]`不等于已经存储在`arr[j]`的位置的元素,或者`i`和`j`相等,说明这是第一个或更大的元素,就将其赋值给`arr[j+1]`,然后`j`自增。
运行这段代码后,你会得到一个没有重复元素的新数组。注意,这种方法会改变原数组的顺序,如果你不想改变原数组,你需要创建一个新的数组。
阅读全文