用c++ 写给定N个整型关键字和素数P, 用除留余数法定义散列函数 H(Key) = Key % P, 构建一个散列表,将关键字依次插入到长度为P的散列表中,用线性探测法处理冲突,并输出各关键字在散列表中的位置。
时间: 2023-06-26 19:03:19 浏览: 121
数据结构查找文件实验
以下是用C++实现的代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 散列函数
int hashFunc(int key, int p) {
return key % p;
}
// 线性探测法解决冲突
int linearProbe(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); // 初始化散列表
cout << "请依次输入" << n << "个关键字:";
for (int i = 0; i < n; i++) {
int key;
cin >> key;
int index = linearProbe(hashTable, key, p); // 插入关键字并获取下标
cout << key << "在散列表中的位置为:" << index << endl;
}
return 0;
}
```
使用示例:
```
请输入关键字个数n和素数p:5 7
请依次输入5个关键字:1 3 5 6 8
1在散列表中的位置为:1
3在散列表中的位置为:3
5在散列表中的位置为:5
6在散列表中的位置为:6
8在散列表中的位置为:0
```
散列表中的位置从0到p-1编号,上面的输出结果表示:1插入到位置1,3插入到位置3,5插入到位置5,6插入到位置6,8插入到位置0。
阅读全文