数据结构课程设计哈希表设计Word文档格式.docx
《数据结构课程设计哈希表设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计哈希表设计Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
char*py;
intk;
}NAME;
NAMENameList[HASH_LEN];
intsi;
}HASH;
2.源代码
#include<
stdio.h>
iostream>
conio.h>
usingnamespacestd;
#defineHASH_LEN50
#defineM47
intNAME_NO=30;
HASHHashList[HASH_LEN];
voidInitNameList()
char*f;
intr,s0,i;
NameList[0].py="
caizenghua"
;
NameList[1].py="
chenjiachuang"
NameList[2].py="
chenquanzhong"
NameList[3].py="
chenxuebin"
NameList[4].py="
chenzhongchao"
NameList[5].py="
chenzifan"
NameList[6].py="
dengchenhua"
NameList[7].py="
duweihao"
NameList[8].py="
fangjiatai"
NameList[9].py="
heguoliang"
NameList[10].py="
hongzexin"
NameList[11].py="
huangjinbiao"
NameList[12].py="
huangliquan"
NameList[13].py="
huangmiaojie"
NameList[14].py="
huangronghao"
NameList[15].py="
huangyonghao"
NameList[16].py="
liguangxi"
NameList[17].py="
lilangzheng"
NameList[18].py="
liangcailin"
NameList[19].py="
linjiewen"
NameList[20].py="
liufurupeng"
NameList[21].py="
liuliang"
NameList[22].py="
luohaoheng"
NameList[23].py="
luowenchao"
NameList[24].py="
sunwenhong"
NameList[25].py="
tanzeming"
NameList[26].py="
wangjian"
NameList[27].py="
wangkaibin"
NameList[28].py="
wangyixin"
NameList[29].py="
wenduke"
for(i=0;
i<
NAME_NO;
i++)
{
s0=0;
f=NameList[i].py;
for(r=0;
*(f+r)!
='
\0'
r++)
s0=*(f+r)+s0;
NameList[i].k=s0;
}
}
voidCreateHashList()
inti;
i<
i++)
HashList[i].py="
"
HashList[i].k=0;
HashList[i].si=0;
}
HASH_LEN;
intsum=0;
intadr=(NameList[i].k)%M;
intd=adr;
if(HashList[adr].si==0)
HashList[adr].k=NameList[i].k;
HashList[adr].py=NameList[i].py;
HashList[adr].si=1;
else
do
d=(d+NameList[i].k%10+1)%M;
sum=sum+1;
}while(HashList[d].k!
=0);
HashList[d].k=NameList[i].k;
HashList[d].py=NameList[i].py;
HashList[d].si=sum+1;
intFindList()
{charname[20]={0};
ints0=0,r,sum=1,adr,d;
printf("
\n请输入人物名称:
);
scanf("
%s"
name);
r<
20;
r++)
s0+=name[r];
adr=s0%M;
d=adr;
if(HashList[adr].k==s0)
\n名称:
%s关键字:
%d查找长度为:
1"
HashList[d].py,s0);
cout<
<
endl;
return0;
elseif(HashList[adr].k==0)
无此记录!
return1;
else
intg=0;
d=(d+s0%10+1)%M;
if(HashList[d].k==0)
"
g=1;
if(HashList[d].k==s0)
{
%d"
HashList[d].py,s0,sum);
}while(g==0);
voidDisplay()
floataverage=0;
for(i=0;
i++)
if(HashList[i].k%M==0)
\n\n地址\t关键字\t\t搜索长度\tH(key)\t名称\n"
%d"
i);
\t%d"
HashList[i].k);
\t\t%d"
HashList[i].si);
HashList[i].k%M);
\t%s"
HashList[i].py);
\n"
average+=HashList[i].si;
average/=NAME_NO;
\n\n平均查找长度:
ASL(%d)=%f\n\n"
NAME_NO,average);
voidDeleteList()
charname[20]={0};
\n请输入人名拼音:
删除成功!
HashList[d].py="
HashList[d].k=0;
HashList[d].si=0;
无法执行删除操作!
已删除成功!
voidEnterList()
charst[20];
char*xin;
xin=st;
ints0=0,r,sum=1,adr,d,h;
\n请输入人名的拼音:
cin>
>
xin;
*(xin+r)!
s0=(int)(*(xin+r))+s0;
已存在于表中,无需插入!
elseif(HashList[d].k==0)
插入成功!
HashList[d].py=xin;
HashList[d].k=s0;
HashList[d].si=1;
h=1;
intg=0,h=0;
HashList[d].si=sum;
if(h==0)
return;
NAME_NO++;
NameList[NAME_NO-1].py=xin;
intadr=(NameList[NAME_NO-1].k)%M;
HashList[adr].k=NameList[NAME_NO-1].k;
HashList[adr].py=NameList[NAME_NO-1].py;
d=(d+NameList[NAME_NO-1].k%10+1)%M;
HashList[d].k=NameList[NAME_NO-1].k;
HashList[d].py=NameList[NAME_NO-1].py;
voidmain()
charch1;
\n哈希表\n"
*-------------------------------------------*\n"
|A.显示哈希表|\n"
|B.查找|\n"
|C.删除|\n"
|D.插入|\n"
|E.退出|\n"
InitNameList();
CreateHashList();
while
(1)
\n请输入执行命令:
fflush(stdin);
ch1=getchar();
if(ch1=='
A'
||ch1=='
a'
)
Display();
elseif(ch1=='
B'
b'
FindList();
C'
c'
)
DeleteList();
D'
d'
EnterList();
E'
e'
\n请输入正确的选择!
五.实验使用环境(本实验所使用的平台和相关的软件)
MicrosoftVisualC++6.0
六.测试
程序运行初显示如下:
从中选择需要做的操作,输入对应的操作A、B、C、D、E,并按回车,输入错误时,会显示“无此记录!
”;
正确时,显示姓名,关键字以及查找长度。
程序运行后显示如下:
(1)选择A查找,显示哈希表和平均查找长度,其中平均查找长度小于2,符合题目要求:
(2)选择B查找,输入要查找的人的姓名,若存在则显示名字和对应的关键字以及查找长度;
若不存在则显示无此记录:
(3)选择C删除,输入要删除的人的姓名,然后删除后显示删除成功。
(4)选择D查找,输入要插入的人的姓名,若原先不存在则显示插入成功,若存在则显示已存在表中,无需插入。
(5)选择E退出。
六.实验心得
这段时间的课程设计,我认识到数据结构是一门比较难的课程,需要花很多的时间去练习和实践,要想把这门课程学好学精不是一件容易的事。
这次课程设计的学习,我明白了编写程序的思路是很重要的。
如果你的脑袋里面没有思路,根本就不可能编出好的程序。
在我们编程序之前一定要做好充分的准备,首先要理清自己的思路,然后再将思路分划成几个模块,一块一块的编写,最后再将所有的模块联系起来,组成一个完整的程序。
虽然一开始会有很多错误,但只要理解错误的原因,细心观察细节,理解总体的思路,问题就能迎刃而解。