问题描述】
由于散列中存在冲突问题,所以有些关键码的存储地址并不是和散列函数计算的一样,后来提出很多解决方法解决冲突,其中线性探测法就是一种。所谓线性探测法就是当发生冲突时,从冲突位置的下一个位置起,依次寻找空的散列地址。这种情况下如果想要查找某个关键字,就要不断探测,最终才可以找到关键码的存储位置,如今需要统计这个过程中的关键码对比次数。
已知关键码集合(关键码均大于零),散列表表长为maxS,散列函数为H(key)= key %divi,用线性探测法处理冲突。
【输入形式】第一行两个整数,第一个表示散列表表长maxS,第二个表示除数divi;第二行关键码的个数;第三行关键码集合,数据元素之间用空格隔开;第四行表示要查找的关键码key。
【输出形式】待查找值的哈希地址。如果待查找值不存在,则输出-1。
【样例输入】
11 11
9
47 7 29 11 16 92 22 8 3
3
【样例输出】6
分析:
1 .创建一个哈希数组
2 .写一个存入哈希的函数 把输入的数据存入哈希数组里
3 .在哈希数组中查询 输出结果
实现
创建存入哈希数组的函数
void Insert (int maxS,int divi,int k,int ht[])
{
//maxS 数组长度 divi 除数 k 要存入的数 ht[] 哈希数组
int j;
j=k%divi;
if(ht[j]==0)//为 0 说明 没有存放数据
ht