用c++ 给定N个整型关键字和素数P, 用除留余数法定义散列函数 H(Key) = Key % P, 构建一个散列表,将关键字依次插入到长度为P的散列表中,用线性探测法处理冲突,并输出各关键字在散列表中的位置。 要求在一行内每个整型关键字在散列表中的位置
时间: 2023-06-24 08:06:03 浏览: 101
以下是使用C++实现的代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 散列函数
int hashFunc(int key, int p) {
return key % p;
}
// 线性探测法解决冲突
int linearProbing(vector<int>& hashTable, int key, int p) {
int index = hashFunc(key, p);
while (hashTable[index] != -1) {
index = (index + 1) % p;
}
hashTable[index] = key;
return index;
}
int main() {
int n, p;
cout << "请输入整型关键字个数n和素数p:";
cin >> n >> p;
vector<int> hashTable(p, -1); // 初始值为-1的vector,表示散列表
cout << "请依次输入" << n << "个整型关键字:" << endl;
for (int i = 0; i < n; i++) {
int key;
cin >> key;
int index = linearProbing(hashTable, key, p);
cout << key << "在散列表中的位置为:" << index << endl;
}
return 0;
}
```
输入示例:
```
请输入整型关键字个数n和素数p:5 7
请依次输入5个整型关键字:
1 3 5 7 9
```
输出示例:
```
1在散列表中的位置为:1
3在散列表中的位置为:3
5在散列表中的位置为:5
7在散列表中的位置为:0
9在散列表中的位置为:2
```
注意:这里使用了简单的vector来表示散列表,实际应用中可能需要使用更高效的数据结构。
阅读全文