用c写一个哈希表函数
时间: 2024-10-18 21:07:20 浏览: 23
在C语言中,我们可以使用数组作为哈希表的基础结构,通过一个哈希函数将关键字映射到数组的索引位置。下面是一个简单的开放寻址法(Open Addressing, 其中一种解决冲突的方法)的哈希函数示例:
```c
#define TABLE_SIZE 100
typedef struct Entry {
char key[20]; // 假设key是字符串,你可以替换为你实际的键值类型
int value; // 值类型
} Entry;
// 哈希函数,这里采用取余的方式,可以根据需求调整
unsigned int hash_func(char* key, unsigned int table_size) {
unsigned int hash = 0;
for(int i = 0; key[i] != '\0'; ++i) {
hash += key[i];
}
return hash % table_size; // 取模操作使得哈希值落在0到table_size-1范围内
}
// 插入一个新元素到哈希表
void insert(Entry* table, char* key, int value, unsigned int table_size) {
unsigned int index = hash_func(key, table_size);
while(table[index].key != NULL && strcmp(table[index].key, key) != 0) {
// 如果当前位置已经有元素并且不是目标key,寻找下一个空位
if(index == table_size - 1) {
index = 0; // 转圈
} else {
index++;
}
}
if(table[index].key == NULL) {
table[index].key = key;
table[index].value = value;
} else {
printf("Key already exists.\n"); // 冲突处理,这里简单打印提示
}
}
// 示例主函数
int main() {
Entry table[TABLE_SIZE] = {0}; // 初始化所有槽位为NULL
insert(&table, "apple", 100, TABLE_SIZE);
insert(&table, "banana", 200, TABLE_SIZE);
// 更多插入...
return 0;
}
```
这个例子中,我们创建了一个大小固定的数组,并使用`hash_func`计算每个键的哈希值。当遇到冲突时,会寻找下一个空闲的位置。
阅读全文