C++实现c++ 构造哈希表,并查询关键字K(整数)在哈希表中的结果:查询成功,返回K在哈希表中的位置
时间: 2024-02-17 08:04:49 浏览: 114
好的,我来回答你的问题。
C++中实现哈希表可以使用标准库中的unordered_map容器,也可以手动实现哈希表。我这里给你介绍一下手动实现哈希表的方法。
构造哈希表的步骤如下:
1. 定义哈希表的大小,一般选择一个质数,比如101。
2. 定义哈希函数,将关键字K映射到哈希表的位置。哈希函数可以采用取余法或者乘法取整法等多种方法。
3. 定义哈希表的结构体,包括数组和链表。数组用来存储哈希值相同的关键字,链表用来处理哈希冲突。
4. 将关键字K插入到哈希表中,先计算K的哈希值,然后将K插入到对应的数组位置或者链表中。
查询关键字K在哈希表中的位置的步骤如下:
1. 计算K的哈希值,找到对应的数组位置或者链表。
2. 在数组或者链表中查找K,如果找到了,返回K在哈希表中的位置,否则返回查询失败。
下面是一个简单的C++代码示例,实现了构造哈希表和查询关键字K的功能:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 定义哈希表的大小
const int HASH_SIZE = 101;
// 哈希节点结构体
struct HashNode {
int key; // 关键字
int val; // 值
HashNode *next; // 指向下一个节点
HashNode(int k, int v) : key(k), val(v), next(NULL) {}
};
// 哈希表结构体
struct HashTable {
vector<HashNode*> table; // 哈希表数组
HashTable() : table(HASH_SIZE, NULL) {}
// 哈希函数
int hashFunc(int key) {
return key % HASH_SIZE;
}
// 插入关键字K和值V到哈希表中
void insert(int key, int val) {
int hash_val = hashFunc(key);
HashNode *node = table[hash_val];
while (node != NULL) {
if (node->key == key) {
node->val = val;
return;
}
node = node->next;
}
HashNode *new_node = new HashNode(key, val);
new_node->next = table[hash_val];
table[hash_val] = new_node;
}
// 查询关键字K在哈希表中的位置
int find(int key) {
int hash_val = hashFunc(key);
HashNode *node = table[hash_val];
while (node != NULL) {
if (node->key == key) {
return node->val;
}
node = node->next;
}
return -1;
}
};
int main() {
HashTable hash_table;
hash_table.insert(1, 10);
hash_table.insert(2, 20);
hash_table.insert(3, 30);
hash_table.insert(4, 40);
hash_table.insert(5, 50);
int k = 3;
int pos = hash_table.find(k);
if (pos != -1) {
cout << "关键字" << k << "在哈希表中的位置是:" << pos << endl;
} else {
cout << "查询失败!" << endl;
}
return 0;
}
```
注意,这里的哈希表采用了链表法来解决哈希冲突。你也可以采用其他方法来解决哈希冲突,比如开放地址法等。
阅读全文
相关推荐

















