若计算机自动输入12000个不同的整数,其值介于0和19999之间,用散列法将这些数进行存储,散列函数为H(n)=n/2,请用C++设计实现程序并调试,写出主函数
时间: 2024-02-09 19:08:22 浏览: 78
好的,我明白了。根据你的要求,我可以为你设计一个简单的散列表程序,来存储这些整数。主要的思路是使用散列函数将每个整数映射到散列表中的一个位置,然后将该位置存储为该整数的值。
以下是一个示例代码,你可以参考一下:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 定义散列函数
int hash(int n) {
return n / 2;
}
// 定义散列表的结构体
struct HashTable {
vector<int> data;
HashTable(int size) {
data.resize(size);
}
// 插入数据
void insert(int n) {
int index = hash(n);
data[index] = n;
}
// 查找数据
bool find(int n) {
int index = hash(n);
return data[index] == n;
}
};
int main() {
HashTable table(10000); // 创建一个大小为10000的散列表
// 生成12000个随机数,并插入散列表
for (int i = 0; i < 12000; i++) {
int n = rand() % 20000;
table.insert(n);
}
// 在散列表中查找一些数
cout << table.find(100) << endl;
cout << table.find(5000) << endl;
cout << table.find(15000) << endl;
return 0;
}
```
这个程序首先定义了一个`hash`函数,用于将整数映射到散列表中的位置。然后定义了一个`HashTable`结构体,用于存储散列表的数据。`HashTable`结构体中使用了一个`vector`来表示散列表,因为`vector`可以方便地动态调整大小。`insert`函数用于将一个整数插入到散列表中,`find`函数用于在散列表中查找一个整数。在`main`函数中,我们创建了一个大小为10000的散列表,并使用`insert`函数将12000个随机数插入到散列表中。然后使用`find`函数在散列表中查找一些数。
希望这个程序能够帮到你,若有不懂的地方,欢迎随时询问!
阅读全文