散列表的设计与实现报告.doc
《散列表的设计与实现报告.doc》由会员分享,可在线阅读,更多相关《散列表的设计与实现报告.doc(14页珍藏版)》请在沃文网上搜索。
1、数据结构课程设计一、 需求分析:1.任务需求:设计散列表实现电话号码查找系统;2.功能需求:. 设每个记录有下列数据项:电话号码、用户名、地址;. 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;. 采用一定的方法解决冲突;. 查找并显示给定电话号码的记录;. 查找并显示给定用户名的记录;3.其他功能:. 系统功能的完善;. 设计不同的散列函数,比较冲突率;. 在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化;二、 总体设计:1. 系统功能设计:定义电话本记录数量(MAXSIZE)、表长(HASHSIZE)、姓名长度(MAX_SIZE)以及结构体typ
2、edef struct的内容,构造两个哈希函数hash1和hash2。功能示意图:录入子系统查询子系统姓名地址号码姓名查找号码查询电话号码管理系统功能示意图2. 系统功能设计:增加系统功能如下: 添加用户信息; 读取所有用户信息; 以姓名建立哈希表;以电话号码建立哈希表; 查找并显示给定用户名的记录; 查找并显示给定电话号码的记录; 清屏以及保存功能;处理流程示意图:开始进入录入系统获得关键字key用Hash1(key)计算地址比较nam_2(d)的值是否和关键字相等输出记录用探查序列d+i*hash2(key)计算(寻找)散列地址结束比较nam_Ht(d)的值是否和关键字相等未找到记录处理流
3、程图 3. 功能模块设计:. 运用main函数输出电话本信息系统的整体界面,在调试运行后如下:. 利用添加功能void getin(Record* a)实现用户信息的录入,在调试运行后如下:.利用哈希函数CREATEHASH1.2来构造哈希表并用Status collision函数的相应功能来查找并解决冲突:.利用void SearchHash1(HashTable* H,int &c)在通讯录里查找姓名关键字,若查找成功,显示信息,c用来记录冲突次数,查找成功时显示冲突次数:三、 详细设计与实现部分:定义头文件及基本属性#include#include#include#include#inc
4、lude #define MAXSIZE 20 /电话薄记录数量 #define MAX_SIZE 20 /人名的最大长度#define HASHSIZE 53 /定义表长 #define SUCCESS 1#define UNSUCCESS -1#define LEN sizeof(HashTable)typedef int Status;typedef char NAMAX_SIZE;定义结构体typedef struct/记录NA name;NA tel;NA add;Record;typedef struct/哈希表Record *elemHASHSIZE; /数据元素存储基址int
5、count; /当前数据元素个数int size; /当前容量HashTable;关键字比较功能的实现Status eq(NA x,NA y)/关键字比较,相等返回SUCCESS;否则返回UNSUCCESSif(strcmp(x,y)=0) return SUCCESS;else return UNSUCCESS;记录个数功能的实现Status NUM_BER; /记录的个数输入信息功能void getin(Record* a)/键盘输入各人的信息coutNUM_BER;int i; for(i=0;iNUM_BER;i+) cout请输入第i+1ai.name; cout请输入第i+1ai.
6、tel; cout请输入第i+1ai.add; /gets(str2);?显示输入信息的实现void ShowInformation(Record* a)/显示输入的用户信息 int i;for( i=0;iNUM_BER;i+) coutn第i+1个用户信息:n 姓 名:ai.namen 电话号码:ai.teln 联系地址:ai.addn; 清屏功能的实现void Cls(Record* a)cout*; system(cls);long fold(NA s)/人名的折叠处理char *p;long sum=0;NA ss;strcpy(ss,s);/复制字符串,不改变原字符串的大小写str
7、upr(ss);/将字符串ss转换为大写形式p=ss;while(*p!=0) sum+=*p+; coutnsum=sum; return sum;构造哈希函数int Hash1(NA str)/哈希函数long n;int m;n=fold(str);/先将用户名进行折叠处理m=n%HASHSIZE; /折叠处理后的数,用除留余数法构造哈希函数return m; /并返回模值int Hash2(NA str)/哈希函数long n;int m;n = atoi(str);/把字符串转换成整型数.m=n%HASHSIZE; /用除留余数法构造哈希函数return m; /并返回模值冲突处理函
8、数,用于解决冲突Status collision(int p,int &c)/冲突处理函数,采用二次探测再散列法解决冲突int i,q;i=c/2+1;while(i=0) return q; else i=c/2+1; else q=(p-i*i)%HASHSIZE; c+; if(q=0) return q; else i=c/2+1; return UNSUCCESS;void benGetTime();void CreateHash1(HashTable* H,Record* a)/建表,以人的姓名为关键字,建立相应的散列表benGetTime();int i,p=-1,c,pp; f
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 列表 设计 实现 报告
