结构推理 编写在线性探查法处理冲突构造的哈希表中查找指定关键字的程序。
【正确答案】设哈希表长为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);
   }
【答案解析】