数据结构哈希表设计

上传人:鲁** 文档编号:545184768 上传时间:2023-11-07 格式:DOC 页数:22 大小:59.50KB
返回 下载 相关 举报
数据结构哈希表设计_第1页
第1页 / 共22页
数据结构哈希表设计_第2页
第2页 / 共22页
数据结构哈希表设计_第3页
第3页 / 共22页
数据结构哈希表设计_第4页
第4页 / 共22页
数据结构哈希表设计_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《数据结构哈希表设计》由会员分享,可在线阅读,更多相关《数据结构哈希表设计(22页珍藏版)》请在金锄头文库上搜索。

1、实验六:存储管理、查找和排序题目:哈希表设计班级: 姓名: 学号:一、 问题描述 针对某个集体(例如你所在的班级)中的“人名”设计一种哈希表,使得平均查找长度均不超过,完毕相应的建表和查表顺序。二、 基本规定 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有0个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用伪随机探测再散列法解决冲突。三、 概要设计1. 构造构造体:tyefsuct;2. 姓名表的初始化:voidIniNamTle();3. 建立哈希表:vdeateHaTabe();4. 显示姓名表:vod DsplayNameabe();5. 姓名查找:void Find

2、Nae();6. 主函数:vidmain(); 四、 具体设计1. 姓名表的初始化vIntameTable() NameTe0py=louuhong; NmTabl.py=shenynong; ameTabe2py=wnqi; eTable.y=hiaotn; NameTable4.py=hatatao;Nameabe5.yhebinjie; NameTable6.py=cnqun;NamTbe7.y=nchn; NmeTe.py=cheji; NameTabl9.y=cheweida;NmeTae10.y=shjiafe; NaeTable1=fangyixn;ameTable12.py=h

3、oufeng; eTable13y=hujiamg; NamT14.p=huaniaju; Nmeable5.py=anqingsong; meTable1.nghe; NmeTable1.p=jinleichn; ameal1py=libi; Naale9p=liqi; Tal20.pyehua;NmTle21.p=lki; Namel2.py=ouangin; Nameable23.p=luchaomig; ameTale24.luqiuwi; NameTabe25.y=anhaijian; aeable2.py=shuxng; NaeTab7.py=uxiaoei; NameTae28.

4、p=sunyubo; Nmeabey=wangwei; or (i=0;iNAMELEN;i+)将字符串的各个字符所相应的ASCII码相加,所得的整数做为哈希表的核心字 t s=0; ca p=NmeTalei.; for (j;*(p+j)!=0;+) =toascii(pj);Nmablei.m=s; 2. 建立哈希表 voidreaHshTble() for(i=0;iASH_LEN;i+) HashTabl.py=0; Hshableim =0; ahTalei.si=; or(i=0;AME_LEN;+) intsu=1,j=0; nt adr=(NeTable.)P;/除留余数法

5、H(ke)=e MOD ,p= if(asabledr.si=) /如果不冲突,将姓名表赋值给哈希表 ashlr.mNaeTabei.m; HahTablad.yNaeTabei.y;HasTbe.i1;ele /如果冲突 hile(HashTleadr.si!=0) d=(dr+d+)%A_LN; 伪随机探测再散列法解决冲突 s=um1; /查找次数加1 ashTaleadr.m aeTaleim; /将姓名表复制给哈希表相应的位置上Hshaadr.py=NmeTabi.py; HashTableadr.ssum; 3. 显示姓名表与哈希表 void DisplaNameTb() prnt(

6、n地址 t 姓名 tt核心字); for (i0;iNAM_LN;+) prt(2d %18st %d n,NameTali.py,NaTalei.m); void ispyashTable()fot as=0.0; print(n 地址 tt 姓名 t核心字 搜索长度n); /显示的格式 for (0;iHASH_LE;i+) prin(d %18st %d t %d,i,HhTabi.py,HhTbem,ashTes); asl+HahTablisi; asl/=NAME_LEN; /求得ASL printf(nn平均查找长度:ASL(%)=% n,AMLN,asl);4. 姓名查找 vi

7、 FidNam() har nam0;it=,sum=1,adr; pntf(n请输入想要查找的姓名的拼音:); scanf(s,nam); fo (j=0;j20;+) /求出姓名的拼音所相应的SCI作为核心字 s+=oaci(name); adr=s; /除留余数法 =0; i(Hhablar.m=s!strcm(HahTldr.py,name) 分3种状况进行判断,并输出超找成果 printf(n姓名: 核心字:% 查找长度为:1,HahTaberpy,); els if(HshTabear.m=0) prinf(没有想要查找的人!n); ese whil(1) r(r+dj+)%AH_; /伪随机探测再散列法解决冲突 ms+; /查找次数加 if(HashTableadrm=0) prntf(没有想要查找的人!n); break; if(HashTabead.=s&!strcmp(Haabladr.p,name)) printf(n姓名:%s核心字:%d查找长度为:%dn,ashbead.py,s,um);break; 五、 测试成果六、 实验环境-ree七、 源程序代码 #icde#inudeti. /ime用到的头文献#icludetlib.h

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号