- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
哈希表的查找
华北电力大学
实 验 报 告
实验名称 哈希图的设计与查找
课程名称 算法与数据结构实验
专业班级: 学生姓名:
学 号: 成 绩:
指导教师:
实验日期:
实验目的及要求
设计哈希表实现电话号码查询系统:
设每个记录有如下数据项:电话号码、用户名、地址;
从键盘输入各个记录,以电话号码为关键字建立哈希表,哈希表的长度为8;
用链地址法解觉冲突;
显示建立好的哈希表,并且对其进行查找。
所用仪器、设备
VC++ 6.0环境
实验说明
1.采用除留余数法进行哈希表的散列,即以电话号码作为主关键字,将电话号码的11位相加,按照模7取余;
解决冲突用链地址法。
四、实验源代码
#include iostream
#include string
using namespace std;
#define M 8
class Student
{
char name[10];
char address[20];
public:
char tel[12];
void getname()
{
cout用户名:;
cinname;
}
void gettel()
{
cout电话(请输入8位或11位电话号码):;
cintel;
while(strlen(tel)!=11strlen(tel)!=8)
{
cout请输入正确号码:;
cintel;
};
}
void getaddress()
{
cout地址:;
cinaddress;
}
void print()
{
cout用户名:name 电话:tel 地址:addressendl;
}
};
typedef struct jdnode //自定义结构体,作边结点
{
char hm[12];
Student *ind;
jdnode *next;
}jd;
void inlist(jd *g[],Student *st) //建立哈希表
{
char *p=st-tel;
int digit=0;
while(*p!=\0)
{
if((*p=0)(*p=9))
digit+=(*p-0);
p++;
}
digit=digit%7;
jd *t=new jd;
strcpy(t-hm,st-tel);
t-ind=st;
t-next=g[digit];
g[digit]=t;
}
void outlist(jd *g[]) // 输出哈希表
{
cout输出哈希表:endl;
for(int i=0;iM;i++)
{
if(g[i]!=NULL)
{
couti:;
jd *q=g[i];
while(q!=NULL)
{
cout q-hm;
q=q-next;
}
coutendl;
}
}
}
void serlist(jd *g[],char a[]) //查找
{
char *p=a;
int digit=0;
while(*p!=\0)
{
if((*p=0)(*p=9))
digit+=(*p-0);
p++;
}
digit=digit%7;
if(g[digit]==NULL)
cout查找失败endl;
else
{
jd *q=g[digit];
while(q!=NULL)
{
if(strcmp(q-hm,a)==0)
break;
q=q-next;
}
if(q!=NULL)
{
cout查找成功!endl;
cout用户信息:endl;
q-ind-print();
}
else
cout查找失败!endl;
}
}
void main() //主函数
{
int num=1;
char ch;
char b[12];
jd *g[M];
for(int i=0;iM;i++)
g[i]=NULL;
cout请输入学生信息:endl;
do
{
coutnum:;
文档评论(0)