#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;
}