设给定的散列表存储空间为H[1-m],每个单元可存放一个记录,H[i]的初始值为零,选取散列函数为H(R.key),其中key为记录R的关键字,解决冲突的方法为线性控测法,用c++编写一个函数将某记录R填入到散列表H中。
时间: 2024-03-18 09:42:39 浏览: 68
gluon_6l3机器人D-H建模+轨迹规划+simsacpe仿真-源文件
5星 · 资源好评率100%
以下是使用C++实现将记录R填入散列表H的函数,其中使用线性探测法解决冲突:
```cpp
#include <iostream>
using namespace std;
const int m = 100; // 散列表存储空间大小
int H[m] = {0}; // 散列表
struct Record {
int key;
// 其他数据项
};
int hash(int key) {
return key % m; // 散列函数使用余数法
}
void insert(Record R) {
int i = hash(R.key); // 计算R的散列地址
while (H[i] != 0) { // 发生冲突
i = (i + 1) % m; // 使用线性探测法查找下一个空单元
}
H[i] = R.key; // 将记录R填入散列表中
}
int main() {
Record R = {123}; // 待插入的记录R
insert(R); // 将R插入散列表
for (int i = 0; i < m; i++) {
cout << H[i] << " "; // 输出散列表中的所有记录
}
return 0;
}
```
这个函数首先定义了一个散列表H,以及一个记录类型Record,其中记录包含一个关键字key用于计算散列地址。
然后,它实现了一个散列函数hash,使用余数法计算关键字的散列地址。
接下来,它定义了一个insert函数,将记录R填入散列表中。该函数首先计算R的散列地址i,如果i单元已经被占用,则使用线性探测法查找下一个空单元。最后,将记录R的关键字填入散列表的空单元中。
最后,主函数演示了将记录R插入散列表H的过程,并输出了散列表中的所有记录。
阅读全文