哈希表

原创 2007年09月29日 12:55:00
 #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("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%10+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("%2d",hlist[i].si);
 };
 gotoxy(53,2);printf("H(key):");
 for(i=0;i<LON;i++)
 {
  gotoxy(53,i+3);
  printf("%2d",(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("%2d",hlist[i+15].si);
   };
   gotoxy(53,2);printf("H(key):");
   for(i=0;i<LON;i++)
   {
    gotoxy(53,i+3);
    printf("%2d",(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("%2d",hlist[i+30].si);
   };
   gotoxy(53,2);printf("H(key):");
   for(i=0;i<LON;i++)
   {
    gotoxy(53,i+3);
    printf("%2d",(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("%2d",hlist[i+45].si);
   };
   gotoxy(53,2);printf("H(key):");
   for(i=0;i<LON;i++)
   {gotoxy(53,i+3);
   printf("%2d",(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;
   
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

哈希表词典

  • 2017年08月01日 14:53
  • 84KB
  • 下载

c + + 哈希表实现数字排序

  • 2015年05月05日 16:04
  • 15KB
  • 下载

哈希表碰撞攻击的基本原理

原文地址:http://blog.jobbole.com/11516/ 来源:张洋 最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种...

数据结构哈希表

  • 2015年01月20日 10:13
  • 872B
  • 下载

哈希表的实现

  • 2014年07月06日 11:20
  • 47KB
  • 下载

哈希表C++实现--hash_table

1、hash_table.h #include 3 #include 4 #include 5 #include 6 #include 7 using namespac...

哈希表实现

  • 2013年05月05日 23:33
  • 5KB
  • 下载

漫谈Linux内核哈希表(1)

关于哈希表,在内核里设计两个很重要的数据结构:    哈希链表节点: 点击(此处)折叠或打开 /*Kerne...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:哈希表
举报原因:
原因补充:

(最多只允许输入30个字)