#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))%10+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("查找:copyright by 姚建飞 2003.6"); gotoxy(5,10);printf("请拼音后回车!"); 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("搜索 %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; /*伪随机*/ 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(); }; };
};
};
}
|