#include<iostream>
using namespace std;
#define m 30 //表长
#define ERROR -1
typedef struct key
{
int key;
}Hashtable;
void chushi(Hashtable hash[])
{
for(int i=0;i<m;i++)
{
hash[i].key=0;
}
}
int max_(int n)//取出不大于m的最大素数;
{
int i;
for(int j=m;j>1;j--)
{
for(i=2;i<j/2;i++)
{
if(j%i==0)
break;
}
if(i==j/2)
return j;
}
}
void CreateHash(Hashtable hash [],int p)//使用线性探索法处理冲突
{
int n=max_(m);
int k,H;
for(int i=0;i<p;i++)
{
cin>>H;
k=H%n;
if(hash[k].key==0)
hash[k].key=H;
else
{
for(int j=1;j<m;++j)
{
k=(k+j)%m;
if(hash[k].key==0)
{
hash[k].key=H;
break;
}
}
}
}
}
void output(Hashtable hash [])
{
for(int i=0;i<m;i++)
{
cout<<hash[i].key<<" ";
}
cout<<endl;
}
int FindHash(Hashtable hash [],int H)
{
int n=max_(m);
int k;
for(int i=0;i<m;i++)
{
k=H%n;
if(hash[k].key==H)
return k;
else
{
for(int j=1;j<=i;j++)
{
k=(k+j)%m;
if(hash[k].key==H)
return k;
}
}
}
return -1;
}
int main()
{
int p;
cout<<"输入数据个数:";
cin>>p;
Hashtable hash[m];
int H;
chushi(hash);
cout<<"输入数据"<<endl;
CreateHash(hash,p);
output(hash);
cout<<"输入查询数据"<<endl;
cin>>H;
if(FindHash(hash,H)!=ERROR)
{
cout<<"查找成功坐标值为"<<FindHash(hash,H)<<endl;
}
else
cout<<"查无此数"<<endl;
return 0;
}
哈希表的线性探测法
最新推荐文章于 2023-06-11 19:09:00 发布