·一周点击排行
·热点推荐
您的位置:首页 >> 计算机 » 等级考试 » 二级C++辅导:哈希表的一个应用 >> 正文

二级C++辅导:哈希表的一个应用

发布时间:2007-11-16 9:30:00 浏览次数: 841

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

                };

      };

}


讨论此主题请进>>: 二级C++辅导:哈希表的一个应用