课程设计报告哈希表Word格式文档下载.docx
《课程设计报告哈希表Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《课程设计报告哈希表Word格式文档下载.docx(18页珍藏版)》请在冰点文库上搜索。
3、概要设计
4、详细设计
头文件
#include<
stdio.h>
string.h>
stdlib.h>
conio.h>
#defineP30/*除数余留法中的除数*/
#defineNULLKEY0
#defineMAX30/*人名个数*/
#definehashlen30/*哈希表长度*/
intsum=0,k=0;
typedefstructNode/*哈希表结构体*/
{
charkey_code[10];
/*哈希表地址*/
structNode*next;
}Node;
typedefstructhashtable/*创建哈希表*/
intkey;
}HashTable[MAX];
intHash(intkey)
intmode=key%P;
/*除留余数法得到的余数*/
returnmode;
}
voidHash_Init(HashTableht)/*哈希表初始化*/
inti;
for(i=0;
i<
MAX;
i++)
{
ht[i].key=NULLKEY;
ht[i].next=NULL;
}
intCharToInt(charstr[]){
returnstr[0]+str[1]+str[2];
intHash_Insert(HashTableht,Node*node)/*为哈希表分配地址*/
intkey=Hash(CharToInt(node->
key_code));
Node*p;
p=(Node*)malloc(sizeof(Node));
if(ht[key].key==NULLKEY)
ht[key].key=key;
ht[key].next=node;
k++;
elseif(ht[key].key==key)
p=ht[key].next;
while(p->
next!
=NULL)
p=p->
next;
p->
next=node;
return1;
Node*Hash_Search(HashTableht,intkey)/*查找函数*/
intp0=Hash(key);
if(ht[p0].key==NULLKEY)
{sum++;
returnNULL;
}
elseif(ht[p0].key==p0)
Node*p=ht[p0].next;
while(p!
=NULL)
if(CharToInt(p->
key_code)==key)
{sum++;
returnp;
sum++;
returnNULL;
intHash_Create(HashTableht)/*哈希表长度*/
{
Node*node;
Hash_Init(ht);
printf("
请输入姓名:
"
);
/*输入30个姓名*/
for(i=0;
i<
30;
i++)
node=(Node*)malloc(sizeof(Node));
scanf("
%s"
node->
key_code);
node->
next=NULL;
Hash_Insert(ht,node);
}
\nCreateSuccessfully!
\n"
inthash_output(HashTableh)/*哈希表的输出部分*/
Node*a;
inti,j,count2=0;
a=(Node*)malloc(sizeof(Node));
j=0;
hashlen;
{
printf("
%4d"
i);
h[i].key);
if(h[i].next!
=0)
count2++;
j=1;
a=h[i].next;
while(a)
{
printf("
->
(*a).key_code);
a=(*a).next;
j++;
count2+=j;
}
returncount2;
voidHash_Link()/*链表法构造函数*/
HashTableht;
Hash_Create(ht);
hash_output(ht);
count=%d\n"
k);
/*查找总长度*/
ASL=%d/8\n"
/*平均查找长度*/
请输入要查找的数据:
/*输入查找的姓名*/
&
key);
node=Hash_Search(ht,key);
printf("
查找次数:
%d\n"
sum);
if(node!
查找成功!
else
查找不成功!
voidhash_create(inth[],intstatus[],intdata)
intaddress;
intdi;
address=data%P;
if(status[address]==0)
h[address]=data;
status[address]=1;
for(di=1;
di<
=hashlen-1;
di++)
address=((data%P)+di)%hashlen;
if(status[address]==0)
{
h[address]=data;
status[address]=1;
break;
}
return;
inthash_search(inth[],intkey)
{intaddress,di;
address=key%P;
if(h[address]==key)/*哈希表中元素与查找元素是否相等*/
else
for(di=1;
di++)/*哈希表中元素与查找元素不相等,查找下一元素*/
address=((key%P)+di)%hashlen;
if(h[address]==key)
{
returndi+1;
if(di>
=hashlen)
return0;
intmain()/*主函数*/
\t\t\t************************\n"
\t\t\t哈希表设计\n"
Hash_Link();
5、测试分析
随机输入的30个人的姓名拼音
测试过程:
输入30个人的姓名拼音,观察输出结果,并进行查找操作
测试结果:
主界面:
哈希表:
6、课程设计总结
这次数据结构课程设计持续了两周,在这两周中付出了很多,同样也得到了很多。
这次课程设计巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。
培养独立思考,深入研究,分析问题、解决问题的能力。
通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
在本次课程设计中,不得不提的还有合作。
虽说课题不是太难,但有时自己想不明白,通过大家的讨论可以更快和更有效率的解决问题,而且映象还很深刻。
所以以后要多多和同学讨论,毕竟自己的不可能想得很全。
通过这次课程设计,让我学到了很多,让我知道了认真上好专业实验课的重要性,以后多在实践中锻炼自己,毕竟说和做还是有很大差距的,而且写程序的过程中要考虑周到,严密。
在做设计的时候要有信心,有耐心,切勿浮躁。
认真的学习课本知识,掌握课本中的知识点,并在此基础上学会灵活运用。
在课余时间里多写程序,熟练掌握在调试程序的过程中所遇到的常见错误,以便能节省调试程序的时间。
7、附录(程序源代码):
#include<
#defineP11
#defineNULLKEY0
#defineMAX20
#definehashlen13
typedefstructemployee
intkey_code;
structemployee*next;
}Employee;
typedefstructhashtable
intHash(intkey)
voidlogo()
\t\t\t哈希表的基本操作\n"
\t\t\t\n"
voidHash_Init(HashTableht)
intHash_Insert(HashTableht,Employee*em)
intkey=Hash(em->
Employee*p;
p=(Employee*)malloc(sizeof(Employee));
ht[key].next=em;
elseif(ht[key].key==key)
next=em;
Employee*Hash_Search(HashTableht,intkey)
if(ht[p0].key==NULLKEY)
elseif(ht[p0].key==p0)
Employee*p=ht[p0].next;
if(p->
key_code==key)
intHash_Create(HashTableht)
Employee*em;
请输入数据:
em=(Employee*)malloc(sizeof(Employee));
%d"
em->
em->
Hash_Insert(ht,em);
voidConFun()
请按任意键继续...."
getch();
inthash_output(HashTableh)
Employee*a;
a=(Employee*)malloc(sizeof(Employee));
voidHash_Link()
ASL=%d/30\n"
em=Hash_Search(ht,key);
if(em!
ConFun();
inthash_search(inth[],intkey){
intaddress,di;
if(h[address]==key)
voidSelectModel()
do
system("
cls"
logo();
fflush(stdin);
\t
(1):
除数余留法创建哈希表\n"
\t
(2):
退出系统\n"
\t请选择序号:
i);
switch(i)
case1:
break;
case2:
感谢您的使用,欢迎下次再来\n"
exit(0);
default:
\t请输入1-6\n"
ConFun();
break;
}while
(1);
intmain()
SelectModel();