构造哈希表,并查询关键字K(整数)在哈希表中的结果:查询成功,返回K在哈希表中的位置, 否则返回“fail”,并输出查找成功或失败时的比较次数 设定哈希函数为:H(key)=key mod 13 哈希表长度m为16,下标取值(0、1......15) 线性探测方法处理冲突:Hi=(H(key)+di) MOD m 【输入形式】 先从标准输入读取整数的个数,然后从下一行开始输入各个整数,整数之间以一个空格分隔。第三行输入查询关键字K 用c++
时间: 2024-02-17 13:03:14 浏览: 97
冲突? 将数组改为链表-哈希表与字典树原理入门
以下是使用C++实现的代码:
```c++
#include <iostream>
using namespace std;
const int m = 16; // 哈希表长度
int hashTable[m]; // 哈希表
int compareCount; // 比较次数
// 哈希函数
int H(int key) {
return key % 13;
}
// 插入关键字
void insert(int key) {
int i = H(key);
int j = 0;
while (hashTable[(i + j) % m] != 0) {
j++;
compareCount++;
}
hashTable[(i + j) % m] = key;
}
// 查找关键字
int search(int key) {
int i = H(key);
int j = 0;
while (hashTable[(i + j) % m] != key && hashTable[(i + j) % m] != 0) {
j++;
compareCount++;
}
if (hashTable[(i + j) % m] == key) {
return (i + j) % m;
} else {
return -1;
}
}
int main() {
int n; // 整数的个数
cin >> n;
for (int i = 0; i < n; i++) {
int key;
cin >> key;
insert(key);
}
int k; // 查询关键字
cin >> k;
compareCount = 0;
int result = search(k);
if (result == -1) {
cout << "fail" << endl;
} else {
cout << result << endl;
}
cout << "比较次数:" << compareCount << endl;
return 0;
}
```
输入样例:
```
8
14 20 3 13 8 9 15 5
15
```
输出样例:
```
10
比较次数:4
```
解释:哈希表中的位置为10,查找过程中比较了4次。
阅读全文