第8次数据库实验报告文档格式.docx
- 文档编号:18605093
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:15
- 大小:82.59KB
第8次数据库实验报告文档格式.docx
《第8次数据库实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《第8次数据库实验报告文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
//人名对应的整数
}NAME;
typedefstruct//哈希表
intsi;
//查找长度
}HASH;
3.主程序模块与各子程序模块间的调用关系
main()
创建哈希表
DSQ
显示哈希表查找关键字退出
结束
二、【详细设计】
1.抽象数据类型具体实现的函数原型说明
voidInitNameList()//姓名初始化
char*f;
intr,s0,i;
NameList[0].names="
yangkai"
;
NameList[1].names="
tangbo"
NameList[2].names="
tommy"
NameList[3].names="
tony"
NameList[4].names="
mat"
NameList[5].names="
jerry"
NameList[6].names="
tom"
NameList[7].names="
cat"
NameList[8].names="
mike"
NameList[9].names="
liming"
NameList[10].names="
liuwei"
NameList[11].names="
juwuba"
NameList[12].names="
qingtianzhu"
NameList[13].names="
dahuangfeng"
NameList[14].names="
xiaolongnv"
NameList[15].names="
yangguo"
NameList[16].names="
zhaozhijing"
NameList[17].names="
yinzhioing"
NameList[18].names="
guojing"
NameList[19].names="
huangrong"
NameList[20].names="
huangyaoshi"
NameList[21].names="
ouyangfeng"
NameList[22].names="
duanyu"
NameList[23].names="
xiaofeng"
NameList[24].names="
qiaofeng"
NameList[25].names="
xuzhu"
NameList[26].names="
azhu"
NameList[27].names="
wangyuyan"
NameList[28].names="
murongfu"
NameList[29].names="
lixiao"
for(i=0;
i<
NAME_NO;
i++)
{
s0=0;
f=NameList[i].names;
for(r=0;
*(f+r)!
='
\0'
r++)
/*方法:
将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字*/
s0=*(f+r)+s0;
NameList[i].k=s0;
}
}
voidCreateHashList()//建立哈希表
{
inti;
for(i=0;
i<
HASH_LENGTH;
i++)
{HashList[i].names="
"
HashList[i].k=0;
HashList[i].si=0;
}
intsum=0;
intadr=(NameList[i].k)%M;
//哈希函数
intd=adr;
if(HashList[adr].si==0)//如果不冲突
HashList[adr].k=NameList[i].k;
HashList[adr].names=NameList[i].names;
HashList[adr].si=1;
else//冲突
{do
{d=(d+NameList[i].k%10+1)%M;
//伪随机探测再散列法处理冲突
sum=sum+1;
//查找次数加1
}while(HashList[d].k!
=0);
HashList[d].k=NameList[i].k;
HashList[d].names=NameList[i].names;
HashList[d].si=sum+1;
voidSearchList()//查找
{charname[20]={0};
ints0=0,r,sum=1,adr,d;
printf("
请输入姓名的拼音:
);
scanf("
%s"
name);
for(r=0;
r<
20;
r++)//求出姓名的拼音所对应的整数(关键字)
s0+=name[r];
adr=s0%M;
//使用哈希函数
d=adr;
if(HashList[adr].k==s0)//分3种情况进行判断
\n姓名:
%s关键字:
%d查找长度为:
1"
HashList[d].names,s0);
elseif(HashList[adr].k==0)
无此记录!
else
{intg=0;
do
{d=(d+s0%10+1)%M;
if(HashList[d].k==0)
{printf("
"
g=1;
if(HashList[d].k==s0)
%d"
HashList[d].names,s0,sum);
}while(g==0);
}
voidDisplay()//显示哈希表
{inti;
floataverage=0;
\n地址\t关键字\t\t搜索长度\tH(key)\t姓名\n"
//显示的格式
50;
i++)
%d"
i);
\t%d"
HashList[i].k);
\t\t%d"
HashList[i].si);
HashList[i].k%M);
\t%s"
HashList[i].names);
\n"
average+=HashList[i].si;
average/=NAME_NO;
\n平均查找长度:
ASL(%d)=%f\n"
NAME_NO,average);
主函数:
voidmain()
{charch1;
InitNameList();
CreateHashList();
本程序为哈希表的实验程序\n"
printf("
D.显示哈希表\nS.查找关键字\nQ.退出程序\n请选择需要的操作:
cin>
>
&
ch1;
switch(ch1)
case'
D'
:
Display();
cout<
<
endl;
break;
S'
SearchList();
cout<
Q'
exit(0);
是否继续?
(y/n):
}while(ch1!
n'
2.函数的调用关系图
InitNameList()
CreateHashList()
DSQ
Display()SearchList()exit(0)
三、【测试结果】
四、【实验总结】
本次试验为哈希表的设计与查找,与普通的表的设计与查找不同,哈希表的设计很灵活,只要使得任何关键字由此所得的哈希函数值都落在表长允许范围内即可。
但这种方法会出现不同的关键字可能得到同一哈希地址,所以要求使用某种方法处理冲突,本次试验采用的是伪随机再散列处理法。
五、【代码】
例如:
#include<
stdio.h>
iostream.h>
stdlib.h>
#defineHASH_LENGTH50//哈希表的长度
#defineM47//随机数
#defineNAME_NO30//人名的个数
//名字
//名字所对应的整数
NAMENameList[HASH_LENGTH];
//全局变量NAME
//名字的拼音
//拼音所对应的整数
HASHHashList[HASH_LENGTH];
//全局变量HASH
voidInitNameList()//姓名(结构体数组)初始化
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告