【正确答案】设哈希表长为15,哈希函数H(key)=key/%13。
#define m 15
#define KEYTYPE int
#define NULL 0
typedef struct
{ KEYTYPE key;
}HASHTABLE;
int hashsearch(HASHTABLE ht[],KEYTYPE k) /*查找算法*/
{ int i,d;
i=0;
d=k/%13;
while(i<m&&ht[d].key!=k&&ht[d].key!=NULL)
{ i++;
d=(d+1)/%m;
}
if(ht[d].key!=k)
d=-1;
return d;
}
void print_hashtable(HASHTABLE ht[]) /*打印哈希表算法*/
{ int i;
for(i=0;i<m;i++)
printf("/%4d",i);
printf("\n\n");
for(i=0;i<m;i++)
printf("/%4d",ht[i].key);
printf("\n\n");
}
void create(HASHTABLE ht[]) /*建立哈希表算法*/
{ int i,d;
for(i=0;i<m;i++)
ht[i].key=NULL;
scanf("/%d",&i);
while(i!=0)
{ d=i/%13;
while(ht[d].key!=NULL)
d=(d+1)/%m;
ht[d].key=i;
scanf("/%d",&i);
}
}
main()
{ int i,k;
HASHTABLE ht[m];
create(ht);
print_hashtable(ht);
printf("\n输入待查元素:");
scanf("/%d",&k);
i=hashsearch(ht,k);
if(i==-1)
printf("待查元素不存在\n");
else
printf("待查元素存在,位置为:/%d",i+1);
}
【答案解析】