在一个无序顺序表中删除所有值重复的元素并使该顺序表中所有值均不同且删除后元素间保持相对位置不变,用c语言实现
时间: 2024-09-14 08:17:08 浏览: 81
小白算法积累——顺序表5#无序顺序表+删除范围
在C语言中,要在无序顺序表中删除所有重复的元素,同时保持元素间的相对位置不变,可以使用双重循环遍历数组,通过比较每个元素与后续元素来检查是否存在重复值,如果存在,则将后续的重复元素向后移动一位,并继续检查新位置上的元素,直到所有元素都检查完毕。这里提供了一个简单的实现方法:
```c
#include <stdio.h>
// 函数声明,用于删除数组中的重复元素
int removeDuplicates(int arr[], int size);
int main() {
int arr[] = {1, 2, 3, 2, 4, 3, 5, 6, 5};
int size = sizeof(arr) / sizeof(arr[0]);
size = removeDuplicates(arr, size); // 删除重复元素后的数组大小
printf("数组中去除重复元素后的结果:");
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
// 函数定义,用于删除数组中的重复元素
int removeDuplicates(int arr[], int size) {
if(size == 0 || size == 1) {
return size; // 如果数组为空或只有一个元素,则直接返回
}
int temp, j; // temp用于临时存储当前元素,j用于计数数组中不重复元素的数量
for(int i = 0; i < size - 1; i++) {
temp = arr[i];
for(int j = i + 1; j < size; ) {
if(arr[j] == temp) {
// 如果发现arr[j]与arr[i]相等,即重复元素,则将其向后移动一位
for(int k = j; k < size - 1; k++) {
arr[k] = arr[k + 1];
}
size--; // 数组大小减1
} else {
// 如果没有重复,则跳到下一个元素
j++;
}
}
}
return size; // 返回新数组的大小
}
```
在上述代码中,`removeDuplicates`函数接收一个整数数组和它的大小,然后通过两层循环检查数组中的每个元素。如果发现重复的元素,就将其向后移动,直到数组中没有重复为止。最后返回数组的新大小。
阅读全文