可以教我一下哈希表的查找吗,带举例的那种(以c语言为例),谢谢啦
时间: 2024-02-27 14:53:21 浏览: 94
当然可以,以下是一个在 C 语言中实现的哈希表查找的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义哈希表结构体
typedef struct {
char *key;
int value;
} Entry;
typedef struct {
int size;
Entry **table;
} HashTable;
// 定义哈希函数
int hash(char *key, int size) {
int hash = 0;
for (int i = 0; i < strlen(key); i++) {
hash = 31 * hash + key[i];
}
return hash % size;
}
// 定义哈希表操作函数
HashTable *createHashTable(int size) {
HashTable *hashTable = malloc(sizeof(HashTable));
hashTable->size = size;
hashTable->table = malloc(sizeof(Entry*) * size);
for (int i = 0; i < size; i++) {
hashTable->table[i] = NULL;
}
return hashTable;
}
void put(HashTable *hashTable, char *key, int value) {
int index = hash(key, hashTable->size);
Entry *entry = malloc(sizeof(Entry));
entry->key = key;
entry->value = value;
hashTable->table[index] = entry;
}
int get(HashTable *hashTable, char *key) {
int index = hash(key, hashTable->size);
Entry *entry = hashTable->table[index];
if (entry == NULL || strcmp(entry->key, key) != 0) {
return -1;
} else {
return entry->value;
}
}
int main() {
// 创建哈希表
HashTable *hashTable = createHashTable(100);
// 插入数据
put(hashTable, "hello", 1);
put(hashTable, "world", 2);
// 查找数据
int value1 = get(hashTable, "hello");
int value2 = get(hashTable, "world");
// 输出结果
printf("value1: %d\n", value1);
printf("value2: %d\n", value2);
return 0;
}
```
在上面的代码中,我们首先定义了一个哈希表结构体 `HashTable`,其中包含一个大小为 `size` 的指针数组 `table`。在插入数据时,我们通过哈希函数 `hash()` 将键值对映射到 `table` 数组中的一个位置,并将其存储为一个 `Entry` 结构体。在查找数据时,我们同样通过哈希函数计算出该键值对应的位置,并在该位置处查找该键对应的值。
需要注意的是,实际的哈希表实现可能会使用更复杂的哈希函数和解决哈希冲突的方法。此外,在实际使用中,我们还需要注意内存管理和哈希表的扩容等问题。
阅读全文