数据结构实验9哈希查找_第1页
数据结构实验9哈希查找_第2页
数据结构实验9哈希查找_第3页
数据结构实验9哈希查找_第4页
数据结构实验9哈希查找_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、intkeynum;/记录的数据域,只有关键字一项1、实验目的(1)复习顺序查找、二分查找、分块查找的根本算法及适用场合;(2)掌握哈希查找的根本方法及适用场合,并能在解决实际问题时灵活应用;(3)稳固在散列查找时解决冲突的方法及特点.2、实验内容(1)哈希表查找的实现(用线性探测法解决冲突);(2)能对哈希表进行插入和查找.3、实验要求(1)分析算法思想,利用 C(C+)语言完成程序设计.(2)上机调试通过实验程序.(3)输入数据,进行哈希插入和查找.(4)给出具体的算法分析,包括时间复杂度和空间复杂度等.(5)撰写实验报告.4、实验步骤与源程序实验步骤本程序共设计了五个函数来实现建表,显示

2、,查找,插入,删除这几个主要功能,然后设计主函数,串接程序,并进行调试,测试实验结果.源代码#include#include#include#include#include#defineMAXSIZE12/哈希表的最大容量,与所采用的哈希函数有关enumBOOLFalse,True;enumHAVEORNOTNULLKEY,HAVEKEY,DELKEY;脸希表元素的三种状态,没有记录、有记录、有过记录但已被删除typedefstruct/定义哈希表的结构intelemMAXSIZE;/数据元素体HAVEORNOTelemflagMAXSIZE;/元素状态标志,没有记录、有记录、有过记录但已被删

3、除intcount;/哈希表中当前元素的个数HashTable;typedefstructRecord;voidInitialHash(HashTable&);/初始化口口布表voidPrintHash(HashTable);/显示哈希米中的所有兀素BOOLSearchHash(HashTable,int,int&);/在哈希表中查找兀素BOOLInsertHash(HashTable&,Record);/在哈希表中插入兀素BOOLDeleteHash(HashTable&,Record);/在哈希表中删除兀素intHash(int);/哈希函数voidmain

4、()HashTableH;/声明哈希表 Hcharch,j=y;intposition,n,k;RecordR;BOOLtemp;InitialHash(H);while(j!=n)printf(nt哈希查找:printf(nt*);printf(nt*1建表*printf(nt*2-显示*printf(nt*3-查找*printf(nt*4-插入*printf(nt*5-删除*printf(nt*0-退出*););););););printf(nt*);printf(nnt 请输入菜单号:);scanf(%c,&ch);/输入操作选项switch(ch)case1:printf(n

5、请输入元素个数(10):);for(k=0;kn;k+)printf请输入第3d 个整数:,k+1;scanf(%d,&R.keynum);/输入要插入的记录temp=InsertHash(H,R);break;case2:if(H.count)/哈希表不空PrintHash(H);elseprintf(n 散列表为空表!n);break;case3:if(!H.count)printf(n 散列表为空表!n);/哈希表空elseprintf(n 请你输入要查找元素(int):);scanf(%d,&R.keynum);/输入待查记录的关键字temp=SearchHash(H,

6、R.keynum,position);/temp=True:记录查找成功;temp=False:没有找到待查记录if(temp)printf(n 查找成功该元素位置是%dn,position);elseprintf(n 本散列表没有该元素!n);break;break;printf(n 请输入要插入元素(int):);scanf(%d,&R.keynum);/temp=InsertHash(H,R);case4:if(H.count=MAXSIZE)/哈希表已满printf(n散列表已经满!n;输入要插入的记录/temp=True:记录插入成功;temp=False:已存在关键字相同的

7、记录default:j=n;printf(nt 欢送再次使用本程序,再见!n);voidInitialHash(HashTable&H)/inti;H.count=0;for(i=0;i=MAXSIZE)p=p%MAXSIZE;/if(p=p1)returnFalse;/素if(k=H.elemp&H.elemflagp=HAVEKEY)/returnTrue;elsereturnFalse;/inti;for(i=0;iMAXSIZE;i+)/显示哈希表中记录所在位置printf(%-4d,i);printf(n);for(i=0;iMAXSIZE;i+)/显布哈希表中记录值

8、if(H.elemflagi=HAVEKEY)printf(%-4d,H.elemi);elseprintf(%4c,);printf(ncount:%dn,H.count);/显示哈希表当前记录数p 指示插入位置,并返回 False求得哈希地址该位置中填有记录并且关键字不冲突处理方法:线性探测再散列循环搜索整个表已搜索完,没有找到待查元查找成功,p 指示待查元素位置查找不成功/查找不成功时插入元素 e 到开放定址哈希表 H 中,并返回 True,否那么返回 Falseintp;if(SearchHash(H,e.keynum,p)素returnFalse;elseH.elemflagp 尸

9、HAVEKEY;已有记录H.elemp=e.keynum;/H.count+;returnTrue;BOOLDeleteHash(HashTable&H,Recorde)/在查找成功时删除待删元素 e,intp;if(!SearchHash(H,e.keynum,p)returnFalse;else并返回 True,否那么返回/H.elemflagp 尸 DELKEY;被删除H.count-;returnTrue;intHash(intkn)return(kn%11);/表中已有与 e 有相同关键字的元设置标志为 HAVEKEY 表不该位置插入记录哈希表当前长度加一False表中不存在待删元素设置标志为 DELKEY 说明该元素已哈希表当前长度减一哈希函数:H(key)=keyMOD115、测试数据与实验结果(可以抓图粘贴)(1)菜单:(3)显示请输入菜单号:2)12345&78101135&7勺:uiint:S(4)查找请输入菜单号,3青你输入要查找元素(皿七门堂我成功该元素位置是才(5)插入请输入菜单号,4胃输入要插入元素无素插入成功,(6)删除请输入菜单号,5青你输入要删除元素Cnt八2删除成功t6、结果分析与实验体会本次实验是参考了范例程序,经过自己的改写,从而实现要求.先做简单的输出,一步步的再做其*MK二二二找一表示我人盘二

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论