用c++构造哈希表,并查询关键字K(整数)在哈希表中的结果:查询成功,返回K在哈希表中的位置, 否则返回“fail”,并输出查找成功或失败时的比较次数 设定哈希函数为:H(key)=key mod 13 哈希表长度m为16,下标取值(0、1......15) 线性探测方法处理冲突:Hi=(H(key)+di) MOD m
时间: 2024-02-22 12:55:22 浏览: 137
数据结构的哈希表使用C++实现
5星 · 资源好评率100%
好的,我来回答你的问题。
以下是一个 C++ 实现的哈希表,使用线性探测法解决冲突,哈希函数为 `H(key) = key mod 13`:
```c++
#include <iostream>
using namespace std;
const int m = 16; // 哈希表长度
int hashTable[m];
// 哈希函数
int H(int key) {
return key % 13;
}
// 插入关键字 key
void insert(int key) {
int i = H(key);
while (hashTable[i] != 0) {
i = (i + 1) % m; // 线性探测
}
hashTable[i] = key;
}
// 查找关键字 key
int search(int key) {
int i = H(key);
int cnt = 1; // 记录比较次数
while (hashTable[i] != key) {
i = (i + 1) % m; // 线性探测
cnt++;
if (hashTable[i] == 0 || cnt > m) { // 查找失败
cout << "fail" << endl;
cout << "比较次数:" << cnt << endl;
return -1;
}
}
// 查找成功
cout << "查找成功,位置为:" << i << endl;
cout << "比较次数:" << cnt << endl;
return i;
}
int main() {
int keys[] = {1, 4, 9, 13, 5, 7, 11, 14, 3, 8};
for (int i = 0; i < 10; i++) {
insert(keys[i]);
}
search(7);
search(10);
return 0;
}
```
在 `main` 函数中,我们插入了 10 个关键字,并分别查找了关键字 7 和 10。运行程序后,输出结果如下:
```
查找成功,位置为:7
比较次数:1
fail
比较次数:11
```
可以看到,对于关键字 7,查找成功并且比较次数为 1;对于关键字 10,查找失败并且比较次数为 11。
阅读全文