第13题用线性探查法实现的散列表 POWERBY KTL

来源:互联网 发布:最好的股票行情软件 编辑:程序博客网 时间:2024/06/06 14:43

/*设有一组关键字(许炼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;
}

 

原创粉丝点击