C语言进行数组去重代码
时间: 2023-10-18 08:19:27 浏览: 94
可以使用双重循环进行数组去重,具体代码如下:
```
#include <stdio.h>
int main() {
int arr[] = {1, 2, 2, 3, 4, 4, 5};
int len = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len;) {
if (arr[j] == arr[i]) {
for (int k = j; k < len - 1; k++) {
arr[k] = arr[k + 1];
}
len--;
} else {
j++;
}
}
}
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
这个代码可以去除数组中的重复元素,输出结果为:1 2 3 4 5。
相关问题
stl容器c语言实现数组去重
在C语言中,可以通过使用STL容器来实现数组去重的功能。STL(Standard Template Library)是C++标准库的一部分,提供了一系列的容器和算法,方便开发者进行数据结构和算法的实现。
在C语言中,可以使用哈希表来实现数组去重。哈希表是一种以键值对形式存储数据的数据结构,通过将元素的值映射到一个唯一的索引位置来实现快速的查找和插入操作。
以下是使用哈希表实现数组去重的步骤:
1. 创建一个空的哈希表。
2. 遍历原始数组中的每个元素。
3. 对于每个元素,检查哈希表中是否已经存在该元素。
- 如果存在,则说明该元素已经出现过,不需要再次插入到结果数组中。
- 如果不存在,则将该元素插入到哈希表中,并将该元素添加到结果数组中。
4. 返回结果数组,即为去重后的数组。
下面是一个示例代码:
```c
#include <stdio.h>
#include <stdbool.h>
#define HASH_SIZE 100
typedef struct Node {
int value;
struct Node* next;
} Node;
typedef struct HashTable {
Node* buckets[HASH_SIZE];
} HashTable;
void initHashTable(HashTable* hashTable) {
for (int i = 0; i < HASH_SIZE; i++) {
hashTable->buckets[i] = NULL;
}
}
int hash(int value) {
return value % HASH_SIZE;
}
bool contains(HashTable* hashTable, int value) {
int index = hash(value);
Node* node = hashTable->buckets[index];
while (node != NULL) {
if (node->value == value) {
return true;
}
node = node->next;
}
return false;
}
void insert(HashTable* hashTable, int value) {
int index = hash(value);
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->value = value;
newNode->next = hashTable->buckets[index];
hashTable->buckets[index] = newNode;
}
void removeDuplicates(int* arr, int size) {
HashTable hashTable;
initHashTable(&hashTable);
int result[size];
int resultSize = 0;
for (int i = 0; i < size; i++) {
if (!contains(&hashTable, arr[i])) {
insert(&hashTable, arr[i]);
result[resultSize++] = arr[i];
}
}
printf("去重后的数组:");
for (int i = 0; i < resultSize; i++) {
printf("%d ", result[i]);
}
printf("\n");
}
int main() {
int arr[] = {1, 2, 3, 4, 2, 3, 5};
int size = sizeof(arr) / sizeof(arr);
removeDuplicates(arr, size);
return 0;
}
```
运行以上代码,输出结果为:去重后的数组:1 2 3 4 5
c语言数组去重函数调用
在C语言中,可以通过编写一个数组去重函数来实现对数组中重复元素的去除。以下是一个示例的数组去重函数调用的介绍:
假设我们有一个整型数组`arr`,长度为`n`,我们想要对该数组进行去重操作。可以按照以下步骤进行:
1. 定义一个新的数组`result`,用于存储去重后的元素。
2. 遍历原始数组`arr`,逐个检查每个元素是否已经存在于`result`数组中。
3. 如果当前元素不存在于`result`数组中,则将其添加到`result`数组中。
4. 最后,`result`数组中存储的就是去重后的元素。
下面是一个示例的C语言代码,展示了如何调用一个数组去重函数:
```c
#include <stdio.h>
// 数组去重函数
int* removeDuplicates(int* arr, int n, int* resultSize) {
int* result = (int*)malloc(n * sizeof(int)); // 分配内存空间
int count = 0; // 记录去重后的元素个数
for (int i = 0; i < n; i++) {
int j;
for (j = 0; j < count; j++) {
if (arr[i] == result[j]) {
break; // 当前元素已存在于result数组中,跳出内层循环
}
}
if (j == count) {
result[count++] = arr[i]; // 当前元素不存在于result数组中,添加到result数组中
}
}
*resultSize = count; // 更新去重后的元素个数
return result;
}
int main() {
int arr[] = {1, 2, 3, 2, 4, 1, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int resultSize;
int* result = removeDuplicates(arr, n, &resultSize);
printf("去重后的数组:");
for (int i = 0; i < resultSize; i++) {
printf("%d ", result[i]);
}
free(result); // 释放内存空间
return 0;
}
```
运行上述代码,输出结果为:
```
去重后的数组:1 2 3 4 5
```
阅读全文