输入不大于m的n个不为0(0表示空值)的数,用线性探查法解决冲突构造散列表。输入一个值key,在散列表中查找key位置c++代码
时间: 2023-12-19 21:15:00 浏览: 78
线性探测法和拉链法处理散列表冲突
5星 · 资源好评率100%
好的,以下是使用线性探测法实现散列表的C++代码,其中包括插入元素和查找元素的功能:
```c++
#include <iostream>
using namespace std;
const int MAXN = 100000; // 散列表最大长度
int hashTable[MAXN]; // 散列表
int n, m; // n个元素,m为散列表长度
// 计算哈希值
int Hash(int key) {
return key % m;
}
// 插入元素
void Insert(int key) {
int h = Hash(key);
while (hashTable[h] != 0) {
h = (h + 1) % m; // 线性探测法
}
hashTable[h] = key;
}
// 查找元素
int Search(int key) {
int h = Hash(key);
while (hashTable[h] != key && hashTable[h] != 0) {
h = (h + 1) % m; // 线性探测法
}
if (hashTable[h] == 0) {
return -1; // 没有找到
} else {
return h; // 找到了,返回位置
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
Insert(x); // 插入元素
}
int key;
cin >> key;
int pos = Search(key); // 查找元素
if (pos == -1) {
cout << "Not Found" << endl;
} else {
cout << pos << endl;
}
return 0;
}
```
注意,这里的哈希函数只是简单的取模运算,实际应用中可能需要根据具体情况来设计更复杂的哈希函数。
阅读全文