c语言哈希表代码和讲解
时间: 2024-06-13 10:04:34 浏览: 128
哈希表是一种高效的数据结构,它可以在常数时间内完成插入、删除和查找操作。下面是一个简单的C语言哈希表代码和讲解:
代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "uthash.h"
struct hashTable {
int key;
int val;
UT_hash_handle hh;
};
struct hashTable *hashTable = NULL;
void insert(int key, int val) {
struct hashTable *s;
HASH_FIND_INT(hashTable, &key, s);
if (s == NULL) {
s = (struct hashTable*)malloc(sizeof(struct hashTable));
s->key = key;
HASH_ADD_INT(hashTable, key, s);
}
s->val = val;
}
int find(int key) {
struct hashTable *s;
HASH_FIND_INT(hashTable, &key, s);
if (s == NULL) {
return -1;
}
return s->val;
}
void delete(int key) {
struct hashTable *s;
HASH_FIND_INT(hashTable, &key, s);
if (s != NULL) {
HASH_DEL(hashTable, s);
free(s);
}
}
void printHashTable() {
struct hashTable *s;
for (s = hashTable; s != NULL; s = (struct hashTable*)(s->hh.next)) {
printf("key:%d, val:%d\n", s->key, s->val);
}
}
int main() {
insert(1, 10);
insert(2, 20);
insert(3, 30);
insert(4, 40);
printf("find key 1, val:%d\n", find(1));
printf("find key 5, val:%d\n", find(5));
delete(3);
printHashTable();
return 0;
}
```
讲解:
1. 首先定义了一个结构体`struct hashTable`,它包含了键`key`和值`val`,以及一个`UT_hash_handle`类型的指针`hh`,这是一个用于哈希表操作的结构体。
2. 在`main`函数中,我们调用`insert`函数向哈希表中插入数据,调用`find`函数查找数据,调用`delete`函数删除数据,最后调用`printHashTable`函数打印哈希表中的所有数据。
3. `insert`函数首先调用`HASH_FIND_INT`宏查找哈希表中是否已经存在该键,如果不存在,则动态分配一个`struct hashTable`类型的结构体,并将键和结构体添加到哈希表中。
4. `find`函数同样调用`HASH_FIND_INT`宏查找哈希表中是否存在该键,如果存在,则返回对应的值,否则返回-1。
5. `delete`函数调用`HASH_FIND_INT`宏查找哈希表中是否存在该键,如果存在,则调用`HASH_DEL`宏删除该键和对应的结构体,并释放内存。
6. `printHashTable`函数遍历哈希表中的所有数据,并打印出键和值。
阅读全文