/*设有一组关键字(许炼2,35,124,153,84,57),需要插入到表长为12的散列表中。
本程序把该题目编写为程序,输入72 35 124 153 84 57回车,输入查找的关键字,
因为输出为key,而不是other,所以若输出与你输入的关键字相同则程序运行正确。
*/
#include "stdio.h"
#include "stdlib.h"
#define p 11
#define M 12
#define N 6
#define nil 0
typedef int keytype;
typedef char datatype;
typedef struct
{
keytype key;
datatype other;
}hashtable;
hashtable HT[12];
int H(keytype k)
{
return k%p;
}
int Linsrch(hashtable HT[],keytype k)
{
int d,i=0;
d=H(k);
while((i<M)&&(HT[d].key!=k)&&(HT[d].key!=nil))
{
i++;
d=(d+i)%M;
}
return d;
}
void Linsert(hashtable *HT,hashtable *s)
{
int d;
d=Linsrch(HT,s->key);
if(HT[d].key==nil)
HT[d]=*s;
else printf("ERROR");
}
void Init(hashtable HT[],int m,keytype key[],int n)
{
int i;
for (i=0;i<m;i++)
{
HT[i].key=0;
}
for(i=0;i<n;i++)
{
hashtable s;
s.key=key[i];
Linsert(HT,&s);
}
}
int main()
{
int i,d;
keytype k;
keytype key[N];
printf("请输入你的关键字序列:");
for(i=0;i<N;i++)
{
scanf("%d",&key[i]);
}
Init(HT,M,key,N);
printf("现在的散列表状态为:/n");
for(i=0;i<M;i++)
printf("%d ",HT[i].key);
printf("/n");
printf("请输入你要查找的关键字:");
scanf("%d",&k);
d=Linsrch(HT,k);
if(HT[d].key==k)
{
printf("%d /n",HT[d].key);
}
else{
printf("发生错误。。。/n");
}
return 0;
}