Discuz!NT
欢迎 游客 , 注册 | 登录 | 会员 | 界面 | 简洁版本 | 在线 | 帮助
商都网教育宝典宝库

发表新主题 回复该主题
本主题被查看1198次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第   上一主题   下一主题
标题: 二级C++辅导:哈希表的一个应用
-[尕硴]
超级版主
UID: 71
来自:
精华: 130
积分: 14003
帖子: 12909
注册: 2007-10-22 17:59:00
状态: 离线
威望: 444.00
金钱: 3355.00 元
只看楼主 2007-11-16 09:30
二级C++辅导:哈希表的一个应用
#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();
                    };
                };

                };

      };

}
#1  
发表新主题 回复该主题
本主题被查看1198次, 共1个帖子, 1页, 当前为第1页     选择页数: 1      跳转到第







现在的时间是 2008-10-11 02:51:55

版权所有 商都网教育宝典
         Powered by Discuz!NT 1.0.6666    Copyright © 2001-2008 Comsenz Inc.
Processed in 0.128 seconds