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