哈希表

    技术2022-05-11  104

    #include <stdio.h> #include <conio.h> #include <ctype.h> #define L 50 /*定义哈希表长*/ #define M 47 /*定义p值*/ #define N 30 /*定义名单长*/ char z[22]; struct old {  char *name;  char *py;  int k; }; struct old oldlist[L];/*原始表*/ struct  hterm {  char *name;  char *py;  int k;  int si; }; struct hterm hlist[L];/*哈希表*/ int i,adr,sum,d; char ch1; float average; /**********************************/ void chash()/*建哈希表*/ {  for (i=0;i<L;i++)  {   hlist[i].name="";   hlist[i].py="";   hlist[i].k=0;   hlist[i].si=0;  };  for (i=0;i<N;i++)  {    sum=0;   adr=(oldlist[i].k)%M;   d=adr;   if(hlist[adr].si==0)   {    hlist[adr].k=oldlist[i].k;    hlist[adr].name=oldlist[i].name;    hlist[adr].py=oldlist[i].py;    hlist[adr].si=1;   }   else   {    do    {     d=(d+((oldlist[i].k))+1)%M;/*伪随机*/     sum=sum+1;    }while (hlist[d].k!=0);    hlist[d].k=oldlist[i].k;    hlist[d].name=oldlist[i].name;    hlist[d].py=oldlist[i].py;    hlist[d].si=sum+1;   }  } } /***************************************/ void findhlist() {   int s0;char r,g;  clrscr();/*清屏*/  for (r=0;r<20;r++){z[r]=0;};  gotoxy(1,1);printf("find:");  gotoxy(5,10);printf("prease'enter'!");  gotoxy(5,12);scanf("%s",z);  s0=0;  for (r=0;r<20;r++){s0=z[r]+s0;};  gotoxy(5,13);printf("%d",s0);  /*for (i=0;i<L;i++)*/  sum=1;  adr=s0%M;  d=adr;  if(hlist[adr].k==s0)  {   gotoxy(18,18);printf("              ");   gotoxy(18,18);printf("%s",hlist[d].name);   gotoxy(18,19);printf("%s",hlist[d].py);   gotoxy(18,20);printf("find %d 次",sum);   getch();  }  else  {   if (hlist[adr].k==0)   {    gotoxy (18,18);    printf("no record!                     ");    getch();   }   else   {    g=0;    for (i=0;g==0;i++)    {     d=(d+s0+1)%M;   /*伪随机*/     sum=sum+1;     if (hlist[d].k==0)     {      gotoxy (18,18);      printf("no record!                 ");      g=1;getch();     };     gotoxy(18,18);     printf("%s",hlist[d].name);     gotoxy(18,19);     printf("%s",hlist[d].py);     gotoxy(18,20);     printf("find %d 次",sum);     getch();     if (hlist[d].k==s0)     {      g=1;      gotoxy(18,21);      printf("find %d scuess!",sum);      getch();     };    };       };     };   } /***************************************/ void inp() /*输入表*/ {  char *f;  int r,s0;  oldlist[0].name="GFF";oldlist[0].py="guifanfan";  oldlist[1].name="YJF";oldlist[1].py="yaojianfei";  oldlist[2].name="YY";oldlist[2].py="yangyang";  oldlist[3].name="ZYH";oldlist[3].py="zhuyuhuang";  oldlist[5].name="CX";oldlist[5].py="chenxi";  oldlist[6].name="ZL";oldlist[6].py="zhanglei";  oldlist[7].name="SYH";oldlist[7].py="shenyonghai";  oldlist[8].name="CDQ";oldlist[8].py="chengdaoquan";  oldlist[9].name="LDQ";oldlist[9].py="ludaoqing";  oldlist[10].name="GYX";oldlist[10].py="gongyunxiang";  oldlist[11].name="SZX";oldlist[11].py="sunzhenxing";  oldlist[12].name="SZF";oldlist[12].py="sunrongfei";  oldlist[13].name="SML";oldlist[13].py="sunminglong";  oldlist[14].name="ZH";oldlist[14].py="zhanghao";  oldlist[15].name="TM";oldlist[15].py="tianmiao";  oldlist[16].name="YGZ";oldlist[16].py="yaojianzhong";  oldlist[17].name="YGQ";oldlist[17].py="yaojianqing";  oldlist[18].name="YGH";oldlist[18].py="yaojianhua";  oldlist[19].name="ZHF";oldlist[19].py="yaohaifeng";  oldlist[20].name="CYH";oldlist[20].py="chengyanhao";  oldlist[21].name="YQF";oldlist[21].py="yaoqiufeng";  oldlist[22].name="QPC";oldlist[22].py="qianpengcheng";  oldlist[23].name="YHF";oldlist[23].py="yaohaifeng";  oldlist[24].name="BY";oldlist[24].py="bianyan";  oldlist[25].name="LL";oldlist[25].py="linglei";  oldlist[26].name="LW";oldlist[26].py="liwei";  oldlist[27].name="HHY";oldlist[27].py="huanhaiyan";  oldlist[28].name="LDQ";oldlist[28].py="liudianqin";  oldlist[29].name="LY";oldlist[29].py="liyun";    /*请在此输入数据,同时修改程序开头的 M L N*/  for (i=0;i<N;i++)  {   s0=0;   f=oldlist[i].py;   for (r=0;*(f+r) != '/0';r++){s0=*(f+r)+s0;};   oldlist[i].k=s0;  }; } /****************************************/ void  dhash() /*显示哈希表*/ {    char LON=17;  clrscr();  if (LON>L){LON=L;};  gotoxy(1,1);printf("hash table:");  gotoxy(1,2);printf("adress:");  for(i=0;i<LON;i++)  {   gotoxy(1,i+3);   printf("%-3d",i);  };  gotoxy(9,2);printf("key:");  for(i=0;i<LON;i++)  {   gotoxy(10,i+3);   printf("%-6d",hlist[i].k);  };  gotoxy(19,2);printf("name:");  for(i=0;i<LON;i++)  {   gotoxy(19,3+i);   printf("%s",hlist[i].name);  };  gotoxy(28,2);printf("spell:");  for(i=0;i<LON;i++)  {   gotoxy(28,i+3);   printf("%s",hlist[i].py);  };  gotoxy(40,2);printf("find longer:");  for(i=0;i<LON;i++)  {   gotoxy(43,i+3);   printf("-",hlist[i].si);  };  gotoxy(53,2);printf("H(key):");  for(i=0;i<LON;i++)  {   gotoxy(53,i+3);   printf("-",(hlist[i].k)%M);  };  average=0;  for (i=0;i<L;i++)  {   average=average+hlist[i].si;};   average=average/N;   gotoxy(10,23);   printf("arrivel find longer:ASL(%d)=%f",N,average);   gotoxy(20,24);   printf("press any key!");   ch1=getch();   if (L>15)   {    clrscr();    if (LON>L-15){LON=L-15;};    gotoxy(1,1);printf("ha xi biao:copyright by YJF 2003.6");    gotoxy(1,2);printf("adress:");    for(i=0;i<LON;i++)    {     gotoxy(1,i+3);     printf("%-3d",i+15);    };    gotoxy(9,2);printf("key:");    for(i=0;i<LON;i++)    {     gotoxy(10,i+3);     printf("%-6d",hlist[i+15].k);    };    gotoxy(19,2);printf("name:");    for(i=0;i<LON;i++)    {     gotoxy(19,3+i);     printf("%s",hlist[i+15].name);    };    gotoxy(28,2);printf("spell:");    for(i=0;i<LON;i++)    {     gotoxy(28,i+3);     printf("%s",hlist[i+15].py);    };    gotoxy(40,2);printf("find longer:");    for(i=0;i<LON;i++)    {     gotoxy(43,i+3);     printf("-",hlist[i+15].si);    };    gotoxy(53,2);printf("H(key):");    for(i=0;i<LON;i++)    {     gotoxy(53,i+3);     printf("-",(hlist[i+15].k)%M);    };    average=0;    for (i=0;i<L;i++)    {     average=average+hlist[i].si;};     average=average/N;     gotoxy(10,23);     printf("arrivel find longer:ASL(%d)=%f",N,average);          gotoxy(20,24);     printf("press any key!   ");     ch1=getch();   };   if (L>30)   {    clrscr();    if (LON>L-30){LON=L-30;};    gotoxy(1,1);printf("ha xi biao :copyright by YJF 2003.6");    gotoxy(1,2);printf("adress:");    for(i=0;i<LON;i++)    {     gotoxy(1,i+3);     printf("%-3d",i+30);    };    gotoxy(9,2);printf("key:");    for(i=0;i<LON;i++)    {     gotoxy(10,i+3);     printf("%-6d",hlist[i+30].k);    };    gotoxy(19,2);printf("name:");    for(i=0;i<LON;i++)    {     gotoxy(19,3+i);     printf("%s",hlist[i+30].name);    };    gotoxy(28,2);printf("spell:");    for(i=0;i<LON;i++)    {     gotoxy(28,i+3);     printf("%s",hlist[i+30].py);    };    gotoxy(40,2);printf("find longer:");    for(i=0;i<LON;i++)    {     gotoxy(43,i+3);     printf("-",hlist[i+30].si);    };    gotoxy(53,2);printf("H(key):");    for(i=0;i<LON;i++)    {     gotoxy(53,i+3);     printf("-",(hlist[i+30].k)%M);    };    average=0;    for (i=0;i<L;i++)    {     average=average+hlist[i].si;};     average=average/N;     gotoxy(10,23);     printf("arrivel find longer:ASL(%d)=%f",N,average);          gotoxy(20,24);     printf("press any key!   ");     ch1=getch();   };   if (L>45)   {    clrscr();    if (LON>L-45){LON=L-45;};    gotoxy(1,1);printf("ha xi biao :copyright by YJF 2003.6");    gotoxy(1,2);printf("adress:");    for(i=0;i<LON;i++)    {gotoxy(1,i+3);    printf("%-3d",i+45);    };    gotoxy(9,2);printf("key:");    for(i=0;i<LON;i++)    {gotoxy(10,i+3);    printf("%-6d",hlist[i+45].k);    };    gotoxy(19,2);printf("name:");    for(i=0;i<LON;i++)    {gotoxy(19,3+i);    printf("%s",hlist[i+45].name);    };    gotoxy(28,2);printf("spell:");    for(i=0;i<LON;i++)    {gotoxy(28,i+3);    printf("%s",hlist[i+45].py);    };    gotoxy(40,2);printf("find longer:");    for(i=0;i<LON;i++)    {gotoxy(43,i+3);    printf("-",hlist[i+45].si);    };    gotoxy(53,2);printf("H(key):");    for(i=0;i<LON;i++)    {gotoxy(53,i+3);    printf("-",(hlist[i+45].k)%M);    };    average=0;    for (i=0;i<L;i++)    {average=average+hlist[i].si;};    average=average/N;    gotoxy(10,23);    printf("arrivel find longer:ASL(%d)=%f",N,average);        gotoxy(20,24);    printf("press any key back!   ");    ch1=getch();   };    } /**************************************/ void main() {  inp();   /*输入原表*/  chash ();/*建哈希表*/ a: clrscr();    gotoxy(21,2);    textcolor(GREEN);    cprintf("welcome----------");    printf("/n");    gotoxy(22, 4);    textcolor(GREEN);    cprintf("   1. show hash table ");    printf("/n");    gotoxy(22, 6);    textcolor(GREEN);    cprintf("   2. find ");    printf("/n");    gotoxy(22, 8);    textcolor(GREEN);    cprintf("   x. exit");    printf("/n");    gotoxy(22, 12);    cprintf(" please choose: ");    printf("/n");    gotoxy(24,14);    ch1=getch();    if(ch1==0x78)    {      textcolor(GREEN);cprintf("thinks !");     printf("/n"); exit();    };/*"x":退出*/    if(ch1==0x31){ dhash();};/*表的属性*/    if(ch1==0x32){ findhlist();};/*查找*/    goto a;     }

    最新回复(0)