通过给定的一组数据用除留余数进行存储,查找给定数据并输出该数据的地址。 约定:散列地址的长度=1000第一行 n,m。n表示存储数据的个数,m表示除数。 第二行:关键码。 第三行: x 查找的数据。一个整数 给定数据的地址, 查找失败 输出“-1”。 要求: 开辟数组Size>=100, m < n;发生冲突时,仅能使用线性探测。c++实现
时间: 2024-03-16 11:45:10 浏览: 104
以下是一个使用C++实现的散列表代码,使用除留余数法进行散列,使用线性探测处理冲突:
```cpp
#include <iostream>
#include <vector>
using namespace std;
vector<int> hash_table(1000, -1); // 创建一个长度为1000的散列表
int hash_func(int data, int m) {
return data % m; // 使用除留余数法计算散列地址
}
void insert(int data, int m) {
int addr = hash_func(data, m);
while (hash_table[addr] != -1) { // 处理冲突,使用线性探测
addr = (addr + 1) % 1000;
}
hash_table[addr] = data;
}
int search(int data, int m) {
int addr = hash_func(data, m);
while (hash_table[addr] != -1) {
if (hash_table[addr] == data) {
return addr;
}
addr = (addr + 1) % 1000;
}
return -1;
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
int data;
cin >> data;
insert(data, m);
}
int x;
cin >> x;
int addr = search(x, m);
if (addr != -1) {
cout << addr << endl;
} else {
cout << "-1" << endl;
}
return 0;
}
```
在使用该散列表时,先输入存储数据的个数n和除数m,然后输入关键码,将数据插入散列表中。接着输入要查找的数据x,按照同样的方法计算散列地址,并使用线性探测查找数据。如果找到了要查找的数据,则输出其地址;否则输出"-1"表示查找失败。
阅读全文