怎么使用哈希函数进行去重c语言代码
时间: 2024-12-06 10:24:56 浏览: 16
在C语言中,可以使用哈希表(通常通过数组实现,因为数组底层也是基于哈希的)来实现元素的去重。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#define TABLE_SIZE 100 // 哈希表大小
// 假设我们有一个结构体或其他数据类型,例如int
typedef int Data;
// 哈希函数示例,这里使用取模运算简单实现
unsigned int hash_function(const Data key) {
return key % TABLE_SIZE; // 对于整数key,返回一个小于TABLE_SIZE的结果
}
// 哈希表节点
struct HashNode {
Data data;
bool isDuplicate; // 标记是否已存在
struct HashNode* next; // 指向下一个哈希表位置
};
// 创建新的哈希表节点
HashNode* create_node(Data data, bool isDuplicate) {
HashNode* newNode = (HashNode*)malloc(sizeof(HashNode));
newNode->data = data;
newNode->isDuplicate = isDuplicate;
newNode->next = NULL;
return newNode;
}
// 填充哈希表
void insert_and_remove_duplicates(HashNode** table, const Data data) {
unsigned int index = hash_function(data);
HashNode* current = table[index];
while (current != NULL) {
if (current->data == data) { // 如果找到相同的值
current->isDuplicate = true;
break; // 去除重复,不再继续搜索
}
current = current->next;
}
// 如果不是重复,添加到链表
if (!current || !current->isDuplicate) {
current = create_node(data, false);
current->next = table[index]; // 插入到当前索引处
table[index] = current;
}
}
// 主程序演示
int main() {
HashNode* table[TABLE_SIZE] = {NULL}; // 初始化空表
// 假设输入数据列表
Data input[] = {1, 2, 3, 4, 5, 2, 6, 1};
for (Data data : input) {
insert_and_remove_duplicates(table, data);
}
// 输出唯一值(非重复)
for (unsigned int i = 0; i < TABLE_SIZE; i++) {
HashNode* node = table[i];
while (node != NULL) {
printf("%d ", node->data); // 可视化处理,实际项目中可以根据需要存储或遍历
node = node->next;
}
}
return 0;
}
```
这个例子展示了如何使用一个基本的哈希表进行去重,实际上,为了更好地管理哈希冲突和性能,你可能需要使用更复杂的哈希算法,并考虑动态扩容等情况。请注意,这只是一个简化的示例,实际应用中可能需要更复杂的数据结构和错误处理。
阅读全文