哈希表的一個(gè)應(yīng)用

字號(hào):

#include
    #include
    #include
    #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     {hlist[i].name="";
     hlist[i].py="";
     hlist[i].k=0;
     hlist[i].si=0;
     };
     for (i=0;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))%10+1)%M;/*偽隨機(jī)*/
     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("查找:copyright by 姚建飛 2003.6");
     gotoxy(5,10);printf("請(qǐng)拼音后回車!");
     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     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("搜索 %d 次",sum);
     getch();
     }
     else
     {if (hlist[adr].k==0)
     {gotoxy (18,18);
     printf("無記錄! ");
     getch();
     }
     else
     {g=0;
     for (i=0;g==0;i++)
     {d=(d+s0%10+1)%M; /*偽隨機(jī)*/
     sum=sum+1;
     if (hlist[d].k==0)
     {gotoxy (18,18);
     printf("無記錄! ");
     g=1;getch();
     };
     gotoxy(18,18);
     printf("%s",hlist[d].name);
     gotoxy(18,19);
     printf("%s",hlist[d].py);
     gotoxy(18,20);
     printf("搜索 %d 次",sum);
     getch();
     if (hlist[d].k==s0)
     { g=1;
     gotoxy(18,21);
     printf("搜索 %d 次成功!",sum);
     getch();
     };
     };
     };
     };
    }