哈希查找的判断实验报告.docx
- 文档编号:7985802
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:9
- 大小:112.60KB
哈希查找的判断实验报告.docx
《哈希查找的判断实验报告.docx》由会员分享,可在线阅读,更多相关《哈希查找的判断实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
哈希查找的判断实验报告
数据结构与算法设计
实验报告
(2016—2017学年第1学期)
实验名称:
年级:
专业:
班级:
学号:
姓名:
指导教师:
成都信息工程大学通信工程学院
一、实验目的
验证哈希查找算法
二、实验要求
(1)先创建一个数组类型的顺序表,以—1作为结束。
从键盘输入一组数据元素后,按顺序表的遍历输出,并打印显示。
(2)再以哈希函数方式,将数据元素放入哈希表中,并将哈希表输出,并打印显示。
采用线性探测法处理冲突。
注意:
哈希表的下标和数据内容都显示到屏幕上。
(3)输入需要查找的任意元素的关键字,查找并输出该元素的位置下标序列号。
若有冲突,显示它原来的下标位置和新的下标位置。
若没有,也将找不到的信息反馈出来。
注意:
用线性探测法处理冲突。
三、实验步骤
1、创建工程(附带截图说明)
2、根据算法编写程序(参见第六部分源代码)
3、编译
4、调试
四、实验结果图
五、心得体会
本次实验练习了哈希表的创建与查找,虽然在实验过程中遇到了一些困难,但还是在老师及同学的帮助下顺利完成了。
之前学习C语言的时候基础不是很好,经过几次上级实验以及自己私下的练习,编写程序的过程中已经不会出现语法上的错误,节约了很多时间去思考算法设计。
实验过程中,在设计处理冲突的算法时,出现的漏洞较大,加之自己的逻辑产生混乱,出了很多差错。
在查阅资料后,理清了设计思路,从而解决了问题。
六、源代码
要求:
粘贴个人代码,以便检查。
#include
#defineMAXSIZE
#defineHASHSIZE13
#defineDELFLAG-1
/*******关键字*******/
typedefstruct{
intkey;
}DataType;
/*******顺序表*******/
typedefstruct{
DataTypeitems[HASHSIZE];
intlength;
}sqList;
/*******哈希表*******/
typedefstruct{
DataTypedata;
inttimes;
}HashTable[HASHSIZE];
/*******哈希函数*******/
intHashFunc(intkey)
{
returnkey%HASHSIZE;
}
/*******线性探查法*******/
intCollision(intd)
{
return(d+1)%HASHSIZE;
}
/*******哈希表的查找*******/
intHashSearch(HashTableht,DataTypeitem)
{
intaddr;
addr=HashFunc(item.key);
while(ht[addr].data.key!
=NULL&&ht[addr].data.key!
=item.key)
{
printf("\n【%d】冲突地址:
%d",item.key,addr);
addr=Collision(addr);
}
if(ht[addr].data.key==item.key)
{
returnaddr;
}
else
{
return-addr;
}
}
/*******哈希表的插入*******/
intHashInsert(HashTableht,DataTypeitem)
{
intaddr;
addr=HashSearch(ht,item);
if(addr>0)
{
return0;
}
ht[-addr].data=item;
ht[-addr].times=1;
return1;
}
/*******哈希表的创建*******/
voidCreatHash(HashTableht,DataTypeitems[],intn)
{
inti;
for(i=0;i { ht[i].data.key=NULL; ht[i].times=0; } for(i=0;i { HashInsert(ht,items[i]); } } /*******哈希表的删除*******/ intHashDelete(HashTableht,DataTypeitem) { intaddr; addr=HashSearch(ht,item); if(addr>=0) { ht[addr].data.key=DELFLAG; return1; } return0; } /*******哈希表的显示*******/ voidDisplayHash(HashTableht) { inti; printf("\n\n哈希表\n\n哈希地址: "); for(i=0;i { printf("%d\t",i); } printf("\n关键字: \t"); for(i=0;i { if(ht[i].data.key! =NULL) { printf("%d\t",ht[i].data.key); } else { printf("\t"); } } printf("\n"); } voidmain() { inti; intaddr; intchoice; HashTableht; DataTypeitem; sqListL; for(i=0;i { L.items[i].key=0; } L.length=0; printf("\n---------哈希查找-------\n"); printf("\n请输入要建立哈希表的关键字序列,以空格分隔,以-1结束\n"); for(i=0;i { scanf("%d",&L.items[i].key); if(L.items[i].key==-1) { break; } L.length++; } while (1) { printf("\n---------哈希查找-------\n"); printf("1: 哈希表操作\n"); printf("0: 退出\n"); printf("------------------\n"); printf("请选择: "); scanf("%d",&choice); switch(choice) { case1: { printf("\n顺序表为: "); for(i=0;i { printf("%d",L.items[i].key); } CreatHash(ht,L.items,L.length); DisplayHash(ht); printf("\n请输入查找元素: "); scanf("%d",&item.key); addr=HashSearch(ht,item); if(addr>=0) { printf("\n【%d】查找到的地址为: \t%d\n",item.key,addr); } else { printf("\n未找到! \n"); } break; } case0: exit(0); default: { printf("\n错误! 请重新输入...\n"); break; } } getchar(); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查找 判断 实验 报告