c++ 构造哈希表,并查询关键字K(整数)在哈希表中的结果:查询成功,返回K在哈希表中的位置, 否则返回“fail”,并输出查找成功或失败时的比较次数 设定哈希函数为:H(key)=key mod 13 哈希表长度m为16,下标取值(0、1......15) 线性探测方法处理冲突:Hi=(H(key)+di) MOD m
时间: 2024-02-17 09:04:16 浏览: 95
哈希表的相关介绍(c++)
好的,我来回答你的问题。
以下是 C++ 实现构造哈希表并查询的代码:
```c++
#include <iostream>
using namespace std;
const int m = 16; // 哈希表长度
int hashTable[m]; // 哈希表
// 哈希函数
int H(int key) {
return key % 13;
}
// 插入操作
int insert(int key) {
int i = H(key);
int j = 0;
while (hashTable[(i + j) % m] != 0 && j < m) {
j++;
}
if (j < m) {
hashTable[(i + j) % m] = key;
return (i + j) % m; // 返回插入位置
} else {
return -1; // 插入失败
}
}
// 查找操作
int search(int key) {
int i = H(key);
int j = 0;
int cnt = 0; // 记录比较次数
while (hashTable[(i + j) % m] != key && hashTable[(i + j) % m] != 0 && j < m) {
j++;
cnt++;
}
if (hashTable[(i + j) % m] == key) {
cout << "查找成功,比较次数为:" << cnt << endl;
return (i + j) % m; // 返回查找位置
} else {
cout << "查找失败,比较次数为:" << cnt << endl;
return -1; // 查找失败
}
}
int main() {
// 构造哈希表
insert(12);
insert(15);
insert(17);
insert(20);
insert(23);
insert(25);
// 查询操作
search(12); // 查找成功,比较次数为:0
search(15); // 查找成功,比较次数为:0
search(17); // 查找成功,比较次数为:0
search(20); // 查找成功,比较次数为:0
search(23); // 查找成功,比较次数为:0
search(25); // 查找成功,比较次数为:0
search(16); // 查找失败,比较次数为:1
search(19); // 查找失败,比较次数为:2
search(26); // 查找失败,比较次数为:3
return 0;
}
```
这里采用的是线性探测方法处理冲突,即如果插入位置已经有元素,就往后顺延,直到找到一个空位置。
查询操作也是类似的,先用哈希函数计算出关键字的位置,如果该位置上的元素不是要查找的关键字,就依次往后查找,直到找到关键字或者遇到空位置为止。同时,还需要记录比较次数,输出比较次数和查找结果。
在上面的代码中,构造的哈希表中插入了一些元素,你可以根据需要修改。查询时,可以依次调用 search 函数来查找元素。
阅读全文