关闭

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

1024人阅读 评论(0) 收藏 举报

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

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34514次
    • 积分:751
    • 等级:
    • 排名:千里之外
    • 原创:40篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条