- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(H)哈希散列问题
实验七 哈希散列问题
需求分析
(1) 根据输入建立图书名称表,采用散列表实现该表,散列函数选用BKDE 字符串哈希。
(2)数据的输入输出格式:
输入分为两部分
第一部分,第一行是行数n,n = 5000。余下n行,每行一个字符串。表示已存在的图书记录。
第二部分,第一行是行数m,m = 1000。余下m行,每行一个字符串。表示要查询的图书记录。
输出:
输出为m行,如果被查的记录存在,则输出YES,如果不存在则输出NO。
概要设计
抽象数据类型
算法思想
基于的基本操作来实现问题
输入分为两部分
第一部分,第一行是行数n,n = 5000。余下n行,每行一个字符串。表示已存在的图书记录。
第二部分,第一行是行数m,m = 1000。余下m行,每行一个字符串。表示要查询的图书记录。
输出模块:输出为m行,如果被查的记录存在,则输出YES,如果不存在则输出NO。
。
算法流程
请输入要存储的书籍数目://提示
等待输入
输出
//提示”YES”或“NO”
输入输出格式
输入:
4
a
ans
and
hellocpp
9
a
b
an
as
ans
and
ande
hellocbb
hellocpp
输出:
YES
NO
NO
NO
YES
YES
NO
NO
YES:
测试结果
五、#includeiostream
#includestring
using namespace std;
//定义哈希散列函数
unsigned int hash_BKDE(char *str)
{
unsigned int seed = 131;
unsigned int hash = 0;
while (*str)
{
hash = hash * seed + (*str++);
}
return (hash 0x7FFFFFFF)%5000;
}
//在主程序中存储元素并查找元素
int main()
{
int n;
int i;
int hash_num;
//一个5000行100列的二维字符数组,保存存入的书籍名
char library[5000][100];
for(i=0;i5000;i++)
strcpy(library[i],NULL);
cout请输入要存储的书籍数目:;
cinn;
for(i=0;in;i++){
char name[100];
//输入一个字符串
cinname;
//根据哈希函数算出映射值
hash_num=hash_BKDE(name);
//如果该位置为空,则直接存入
//coutstrcmp(library[hash_num],NULL)endl;
if(!strcmp(library[hash_num],NULL)) strcpy(library[hash_num],name);
//否则找一个空的位置
else{
while(hash_num5000strcmp(library[++hash_num],NULL))
{cout(library[++hash_num]!=NULL)endl;};
//如果超出数组范围,则存储失败
if(hash_num==5000) cout存储失败endl;
else {strcpy(library[hash_num],name);}
}
}
//查找
//一个1000行的100列的二维数组,用来存储要查询的书籍名
char search[1000][100];
cout请输入要查找书籍的数目:;
cinn;
for(i=0;in;i++)
{
//输入一个字符串
cinsearch[i];
}
//在library中查找
cout输出:endl;
for(i=0;in;i++)
{
//获取映射值
hash_num=hash_BKDE(search[i]);
//如果在library中为空,则为no
if(!strcmp(library[hash_num],NULL))
coutNOendl;
else
{//如果不为空,判断是否相等
if(!strcmp(library[hash_num],search[i]))
coutYESendl;
文档评论(0)