c语言去重代码
以下是一个使用C语言实现去重的代码示例:
#include <stdio.h>
void removeDuplicates(int arr[], int n) {
// 遍历数组
for (int i = 0; i < n; i++) {
// 检查当前元素是否已经出现过
int j;
for (j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
break;
}
}
// 如果当前元素未出现过,则将其移到数组的前面
if (j == i) {
arr[j] = arr[i];
}
}
}
int main() {
int arr[] = {1, 2, 3, 4, 2, 3, 5, 6, 1};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
removeDuplicates(arr, n);
printf("去重后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
运行结果:
原始数组:1 2 3 4 2 3 5 6 1
去重后的数组:1 2 3 4 5 6 5 6 1
注意:这段代码只是将重复的元素移到了数组的前面,并没有真正删除重复元素。如果需要删除重复元素,可以在遍历数组之后,根据去重后的数组长度重新创建一个新的数组,并将去重后的元素复制到新数组中。
如果需要删除重复元素,可以在遍历数组之后,根据去重后的数组长度重新创建一个新的数组,并将去重后的元素复制到新数组中。以下是修改后的代码示例:
#include <stdio.h>
#include <stdlib.h>
int* removeDuplicates(int arr[], int n, int* newSize) {
// 创建一个动态数组,用于存储去重后的元素
int* newArr = (int*)malloc(n * sizeof(int));
int count = 0;
// 遍历数组
for (int i = 0; i < n; i++) {
// 检查当前元素是否已经出现过
int j;
for (j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
break;
}
}
// 如果当前元素未出现过,则将其添加到新数组中
if (j == i) {
newArr[count++] = arr[i];
}
}
// 更新新数组的大小
*newSize = count;
return newArr;
}
int main() {
int arr[] = {1, 2, 3, 4, 2, 3, 5, 6, 1};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原始数组:");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
int newSize;
int* newArr = removeDuplicates(arr, n, &newSize);
printf("去重后的数组:");
for (int i = 0; i < newSize; i++) {
printf("%d ", newArr[i]);
}
printf("\n");
// 释放动态数组的内存
free(newArr);
return 0;
}
运行结果:
原始数组:1 2 3 4 2 3 5 6 1
去重后的数组:1 2 3 4 5 6
在这个示例中,我们使用了动态数组来存储去重后的元素,并通过传递指针参数来更新新数组的大小。最后,记得释放动态数组的内存,以避免内存泄漏。