资源描述:
《课程设计报告--数据哈希表应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、兰州商学院陇桥学院工学系课程设计报告设计题目:数据哈希表应用系别:工学系专业(方向):网络工程班年级、班:2012级计算机科学与技术学生姓名:李妮学生学号:20120661116指导教师:王万玉2013年12月24日目录二、需求分析:1三、算法思想:1四、概要设计:2五.系统的设计与实现2六、总结3七、附件(代码、部分图表)4哈希表应用一、问题描述哈希表应用设计:设哈希表长为13,用除留余数法构造一个哈希函数,以开放定址法中的线性探测再散列法作为解决冲突的方法,编程实现哈希表的查找、插入、删除、显示和退出系统的算法。二、需求分析:1、功能需求①.用户能够自定义输入数据,存入哈希表里;
2、②.用户能够对当前哈希表进行管理。操作内容包括:显示当前哈希表、查询某个数据、插入某个数据、删除表中某个数据、退出该系统。③.程序有良好的交互界面,有操作提示和出错提示,方便用户使用和进出入程序。2、程序约束①.哈希表的散列方法为除留余数法,处理冲突的办法为线性探测在散列。②.使用C/C++语言编写,程序模块化设计。程序可实现用户与计算机的交互过程。在计算机显示提示信息后,可由用户键入运算命令以实现对应的功能,包含表的建立、数据的查找、插入、删除、显示、退出等功能。本程序旨在实现哈希函数的构造与处理存储冲突,因而指定哈希表存储的数据类型为简单的整型数字,在实用性上还有所欠缺。但根据用
3、户需求的变化,可以对程序的基本数据类型进行改造,以实现更为丰富的功能,进而体现哈希表在查找数据时的优越性。三、算法思想:在设定哈希表的抽象数据类型时,要有查找数据元素的操作。另外,插入操作和删除操作也要用到查找数据元素操作,以查看该数据元素是否存在,因此可以设计查找元素操作包括插入和删除操作的查找。因此,查找操作就有两种情况:一种情况是插入操作时寻找空闲单元的查找;另一种情况是在查找和删除操作时寻找该元素是否在哈希表中已存在的查找。插入操作时寻找空闲单元查找的特征是哈希表中不存在该对象,设计此时查找函数返回该空闲单元位置的“正”值;查找和删除操作时寻找该元素是否在哈希表中已存在的特征
4、是哈希表中已存在该数据元素,设计此时查找函数返回该数据单元位置的“负”值。进而执行后续操作。为了区分哈希表中每一个表元素的当前状态,为每一个表元素设置一个“标志”定为tag。tag=0表示该元素为空;tag=1表示该元素以存放有数据元素;tag=-1表示该元素中存放的数据元素已被删除。判断当tag为0或-1时都可以进行插入操作。11四、概要设计:哈希表抽象数据类型的定义:ADTHashTable{数据对象:D={ai
5、ai∈ElemSet,i=1,2,...n,n≥0}数据关系:R1={
6、ai-1∈D,i=1,2,...n}基本操作:Initiate(&h)操作结果
7、:构造一个空的哈希表h。SearchHash(h,x,p)初始条件:哈希表h已存在;p为除留余数法中除数,由用户指定。操作结果:查找表中元素与指定数据x比较。元素已存在时返回其所在位置的负数下标、不存在时返回其位置的正数下标、遍历哈希表后未查找到时返回表长。Insert(&h,x,p)初始条件:哈希表h已存在。操作结果:查找操作后插入元素x至哈希表。若元素已存在或哈希表已满时插入操作失败,返回值为0。Delete(&h,x,p)初始条件:哈希表h已存在。操作结果:查找操作后从哈希表中删除元素x。若元素不在表中时删除操作失败,返回值为0。Print(h)初始条件:哈希表h已存在。操作结
8、果:显示哈希表中元素及存储状态。五.系统的设计与实现intHash(Tkey);//计算哈希地址voidCollision(int&s);//冲突,计算下一个地址intSearch(Tkey,int&s);//哈希查找intInsert(ElemTypee);//元素插入intDelete(ElemTypee);//元素删除voidDisplay();//显示哈希表templateintLHSearch::Insert(ElemTypee){//插入元素ints;if(count==size){11printf("表满,不能插入!");re
9、turnUNSUCCESS;}else{s=Hash(e.key);intf;f=Search(e.key,s);if(f)//表中已有和e的关键字相同的元素,不进行插入操作{printf("该元素已存在,不能插入!");returnUNSUCCESS;}else{HT[s].key=e.key;printf("插入成功!");count++;returnSUCCESS;}}}1、本次课程设计采用的是除留余数法构造了哈希表,除数的选择很重要。如果选