手动实现哈希表
哈希表的定义
哈希表的定义:
- 哈希函数:将任意长度的输入(一般是字符串)映射到一个固定长度的输出(一般是整数)上,这个映射函数称为哈希函数。
- 哈希表:是一种数据结构,它以某种方式将键(key)映射到值(value)上。
- 哈希表的特点:
- 哈希表的存储空间是有限的,当元素的数量超过了存储空间时,就会出现哈希冲突。
- 哈希表的查找、插入、删除操作的时间复杂度都为O(1)。
手动实现哈希表
手动实现哈希表的步骤如下:
- 定义哈希表的结构,包括哈希表的大小,以及哈希表的数组。
- 定义哈希函数,将键映射到数组的索引上。
- 定义节点的结构,包括节点的键和值,以及指向下一个节点的指针。
- 定义插入、查找、删除操作。
- 测试哈希表。
下面是实现的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 手动实现哈希表
// 哈希表长定义
#define HASH_SIZE 1000001
// 哈希函数
#define HASH(x) ((x) % HASH_SIZE)
// 节点的定义
struct Node {
int key;
int value;
struct Node *next;
};
// 哈希表的结构
struct HashTable {
struct Node *table[HASH_SIZE];
};
// 创建哈希表
struct HashTable *createHashTable() {
struct HashTable *ht = (struct HashTable *)malloc(sizeof(struct HashTable));
memset(ht->table, 0, sizeof(ht->table));
return ht;
}
// 插入元素
void insert(struct HashTable *ht, int key, int value) {
// 先查找是否存在该元素
int index = HASH(key);
// 遍历链表
struct Node *p = ht->table[index];
while (p) {
if (p->key == key) {
p->value = value;
return;
}
p = p->next;
}
// 元素不存在,插入到链表头
struct