输入不大于m的n个不为0(0表示空值)的数,用线性探查法解决冲突构造散列表。 #include<iostream>
时间: 2023-12-19 13:21:09 浏览: 149
Accessoft-为0的数据不显示,为空值的数据不显示,数据记录等于0等于空值的不显示.mdb
好的,这是一个关于散列表的问题,让我来解答一下。
首先,线性探查法是一种解决散列表冲突的方法,它的基本思想是:当插入一个元素时,如果它所应该插入的位置已经被占用了,那么就从该位置开始顺序往后查找,直到找到一个空位置为止。
下面是一个用C++实现线性探查法构造散列表的例子:
```c++
#include<iostream>
using namespace std;
const int N = 1000; //散列表的大小
int h[N]; //散列表
//哈希函数
int hash(int x) {
return x % N;
}
//插入元素
void insert(int x) {
int t = hash(x);
while(h[t]) t = (t + 1) % N;
h[t] = x;
}
//查找元素
bool find(int x) {
int t = hash(x);
while(h[t]) {
if(h[t] == x) return true;
t = (t + 1) % N;
}
return false;
}
int main() {
int n, m;
cin >> n;
for(int i = 0; i < n; i++) {
int x;
cin >> x;
insert(x);
}
cin >> m;
for(int i = 0; i < m; i++) {
int x;
cin >> x;
if(find(x)) cout << "YES" << endl;
else cout << "NO" << endl;
}
return 0;
}
```
在这个例子中,我们定义了一个大小为N的散列表h,插入元素时先计算哈希值t,如果位置h[t]已经被占用,则循环往后查找空位置,直到找到一个空位置为止。查找元素时也是类似的思路,先计算哈希值t,如果位置h[t]不是要查找的元素,则循环往后查找,直到找到要查找的元素或者遇到空位置为止。
希望我的解答能够帮助你解决这个问题。
阅读全文