哈希表的查找和算法

数据结构的一道题目:

设有一组关键字{12,11,35,25,22,58},采用哈希函数:H(key)=key%6,采用开放

地址法的二次探测再哈希方法解决冲突,试在0~10的哈希地址空间中对该关键字序列

构造哈希表。

解法:

依题,m=11,二次探测再哈希的下一地址计算公式为

d1=H(key),

d2=(d1+i*i)%m,

d3=(d1-i*i)%m

其中(i=1,2,3,…)

则有:

H(12)=12%6=0

H(11)=11%6=5

H(35)=35%6=5(冲突)

H(35)=(5+1*1)%11=6

H(25)=25%6=1

H(22)=22%6=4

H(58)=58%6=4(冲突)

H(58)=(4+1*1)%11=5(冲突)

H(58)=(4-1*1)%11=3

[b]对应的构造算法实现:[/b]



#include<iostream>
using namespace std;

void CrtHash(int a[],int val,int n1,int n2)
{
int temp=val%n1; //没有冲突
if(a[temp]==0){a[temp]=val;return;}
else //发生冲突
{
int temp1;
for(int j=1;;++j)
{
temp1=(temp+j*j)%n2;
if(a[temp1]==0){a[temp1]=val;return;}

temp1=(temp-j*j)%n2;
if(a[temp1]==0){a[temp1]=val;return;}
}
}
}

int main()
{
int KEY[6]={12,11,35,25,22,58};
int hashtable[11];
memset(hashtable,0,sizeof(hashtable));

for(int i=0;i<6;++i)
{
CrtHash(hashtable,KEY[i],6,11);
}
for(int i=0;i<11;++i)
{
cout<<hashtable[i]<<" ";
}
return 0;
}
    原文作者:查找算法
    原文地址: https://blog.csdn.net/iteye_16942/article/details/82046739
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞