#include "iostream.h"
const int m=13;
const int n=10;
int r[n+1];
class lnode
{
public:int j;
int h(int k) //构造散列函数
{
return k%13;
}
void creat(int ht[m],int n)
{
int i,j;
int k;
for(i=0;i<m;i++)
ht[i]=NULL;
for(i=1;i<=n;i++)
{
k=r[i]; //r[i] 为一个关键字
j=h(k); //j=h(k)为散列函数
while(ht[j]!=NULL)
j=(j+1)%m; //发生冲突时,查找空闲位置
ht[j]=k;
}
}
int find(int ht[m],int k)
{
int j=h(k);
if(ht[j]==NULL)
return -1; //查找失败
else if(ht[j]==k)
return j; //一次查找成功
else
{
while((ht[j]!=k)&&(ht[j]!=NULL))
j=(j+1)%m;
if(ht[j]==NULL)
return -1; //多次查找失败
else return j; //多次查找成功
}
}
};
void main()
{
int x,p,ht[m];
int flag=0;
lnode l;
cout <<"输入"<<n<<"个关键字序列:";
for(int y=1;y <=n;y++)
cin>>r[y]; //输入关键字序列
l.creat(ht,n); //建立散列表
cout <<"输入要查找的元素:";
cin>>x;
p=l.find(ht,x);
cout<<"要查找的元素在"<<p<<"个位置";
cout<<endl;
}