c++中哈希表的用法
时间: 2023-12-01 13:03:23 浏览: 109
哈希表-使用C++实现的哈希表-HashTable.zip
哈希表是一种常用的数据结构,用于实现键值对的存储和查找。在C语言中,可以使用哈希表来快速查找和操作数据。通常使用一个哈希函数将键映射到数组的索引位置,然后在该位置存储相应的值。C语言中的哈希表可以使用数组和链表的组合来实现。
在C语言中,可以使用自定义的哈希函数来实现哈希表。常用的哈希函数有除留余数法、乘法哈希法、平方取中法等。除留余数法是最简单和常用的哈希函数之一,它将关键码取模哈希表的长度,从而得到哈希地址。
C语言中的哈希表解决哈希冲突的方法主要有两种:闭散列和开散列。闭散列也称为拉链法,使用链表来解决冲突,当发生冲突时,将新的键值对插入到链表的末尾。开散列也称为线性探测法,当发生冲突时,将新的键值对插入到下一个可用的位置。
以下是一个使用闭散列方法实现哈希表的简单示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义哈希表节点的结构体
typedef struct {
int key;
int value;
} Node;
// 定义哈希表的结构体
typedef struct {
int size;
Node* table;
} HashTable;
// 创建哈希表
HashTable* createHashTable(int size) {
HashTable* hashTable = (HashTable*)malloc(sizeof(HashTable));
hashTable->size = size;
hashTable->table = (Node*)malloc(sizeof(Node) * size);
// 初始化哈希表
for (int i = 0; i < size; i++) {
hashTable->table[i].key = -1;
hashTable->table[i].value = -1;
}
return hashTable;
}
// 哈希函数
int hashFunction(int key, int size) {
return key % size;
}
// 插入键值对到哈希表
void insert(HashTable* hashTable, int key, int value) {
int index = hashFunction(key, hashTable->size);
// 如果哈希地址已经被占用,发生冲突
while (hashTable->table[index].key != -1) {
index = (index + 1) % hashTable->size; // 线性探测法
}
// 插入键值对
hashTable->table[index].key = key;
hashTable->table[index].value = value;
}
// 根据键查找哈希表中的值
int get(HashTable* hashTable, int key) {
int index = hashFunction(key, hashTable->size);
// 如果哈希地址已经被占用,发生冲突
while (hashTable->table[index].key != key) {
index = (index + 1) % hashTable->size; // 线性探测法
}
// 返回值
return hashTable->table[index].value;
}
int main() {
// 创建一个大小为10的哈希表
HashTable* hashTable = createHashTable(10);
// 插入键值对
insert(hashTable, 1, 10);
insert(hashTable, 2, 20);
insert(hashTable, 3, 30);
// 查找键对应的值
int value1 = get(hashTable, 1);
int value2 = get(hashTable, 2);
int value3 = get(hashTable, 3);
printf("Key 1: %d\n", value1); // 输出:Key 1: 10
printf("Key 2: %d\n", value2); // 输出:Key 2: 20
printf("Key 3: %d\n", value3); // 输出:Key 3: 30
return 0;
}
```
阅读全文