哈希表设计-数据结构课程设计.pdf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈希表 设计 数据结构 课程设计
- 资源描述:
-
山东科技大学学生课程设计山东科技大学学生课程设计实习实习 6 6、哈希表设计、哈希表设计一、一、需求分析需求分析1.问题描述问题描述针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度均不超过 R,完成相应的建表和查表顺序。2.基本要求基本要求假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有 30 个,取平均查找长度的上限为 2。哈希函数用除留余数法构造,用伪随机探测再散列法处理冲突。3.测试数据测试数据取读者周围较熟悉的 30 个人的姓名。4.实现提示实现提示 如果随机数自行构造,则应首先调整好随机函数,使其分布均匀。人名的长度均不超过 19 个字符(最长的人名如:庄双双(Zhuang Shuangshuang)。字符的取码方法可直接利用 C 语言中的 toascii 函数,并可先对过长的人名先作折叠处理。二、概要设计二、概要设计ADT Hash 数据对象 D:D 是具有相同特征的数据元素的集合。各数据元素均含有类型相同,可唯一标识数据元素的关键字。数据关系 R:数据元素同属一个集合。InitNameTable()操作结果:初始化姓名表。CreateHashTable()操作结果:建立哈希表。DisplayNameTable()操作结果:显示姓名表。DisplayHashTable()操作结果:显示哈希表。FindName()操作结果:查找姓名。ADT Hash三、详细设计(源代码)三、详细设计(源代码)(使用 C 语言)#include#include/time 用到的头文件#include/随机数用到的头文件#include/toascii()用到的头文件#include/查找姓名时比较用的头文件#define HASH_LEN 50/哈希表的长度#define P 47/小于哈希表长度的 P#define NAME_LEN 30/姓名表的长度typedef struct/姓名表 char*py;/名字的拼音 int m;/拼音所对应的NAME;NAME NameTableHASH_LEN;/全局定义姓名表typedef struct/哈希表 char*py;/名字的拼音山东科技大学学生课程设计山东科技大学学生课程设计 int m;/拼音所对应的 ASCII 总和 int si;/查找长度HASH;HASH HashTableHASH_LEN;/全局定义哈希表int d30,i,j;/全局定义随机数,循环用的 i、jvoid InitNameTable()/姓名表的初始化 NameTable0.py=caowukui;NameTable1.py=langzhijie;NameTable2.py=dongshuliang;NameTable3.py=qiuhouyang;NameTable4.py=zhangxu;NameTable5.py=duhuan;NameTable6.py=fanqing;NameTable7.py=songxiaofei;NameTable8.py=dutongtong;NameTable9.py=sunhaohao;NameTable10.py=shanjianfeng;NameTable11.py=wangbaoshan;NameTable12.py=houfeng;NameTable13.py=hujiaming;NameTable14.py=jiangkaiqiang;NameTable15.py=xuyang;NameTable16.py=lvdelu;NameTable17.py=shenjinfeng;NameTable18.py=xuhui;NameTable19.py=hanle;NameTable20.py=xunwenwen;NameTable21.py=chenhongcong;NameTable22.py=zhangyanyan;NameTable23.py=nieyanshun;NameTable24.py=haopengcheng;NameTable25.py=yuhaiyuan;NameTable26.py=shuxiang;NameTable27.py=sunyingjie;NameTable28.py=wangbo;NameTable29.py=zhaoqing;NameTable30.py=zhangshengqian;for(i=0;iNAME_LEN;i+)/将字符串的各个字符所对应的 ASCII 码相加,所得的整数做为哈希表的关键字 int s=0;char*p=NameTablei.py;for(j=0;*(p+j)!=0;j+)s+=toascii(*(p+j);NameTablei.m=s;void CreateHashTable()/建立哈希表 for(i=0;iHASH_LEN;i+)山东科技大学学生课程设计山东科技大学学生课程设计 HashTablei.py=0;HashTablei.m=0;HashTablei.si=0;for(i=0;iNAME_LEN;i+)int sum=1,j=0;int adr=(NameTablei.m)%P;/除留余数法 H(key)=key MOD p,p=m if(HashTableadr.si=0)/如果不冲突,将姓名表赋值给哈希表 HashTableadr.m=NameTablei.m;HashTableadr.py=NameTablei.py;HashTableadr.si=1;else /如果冲突 while(HashTableadr.si!=0)adr=(adr+dj+)%HASH_LEN;/伪随机探测再散列法处理冲突 sum=sum+1;/查找次数加 1 HashTableadr.m=NameTablei.m;/将姓名表复制给哈希表对应的位置上 HashTableadr.py=NameTablei.py;HashTableadr.si=sum;void DisplayNameTable()/显示姓名表 printf(n 地址 tt 姓名 tt 关键字n);for(i=0;iNAME_LEN;i+)printf(%2d%18s tt%d n,i,NameTablei.py,NameTablei.m);void DisplayHashTable()/显示哈希表 float asl=0.0;printf(nn 地址 tt 姓名 tt 关键字 t 搜索长度n);/显示的格式 for(i=0;iHASH_LEN;i+)printf(%2d%18s tt%d tt%dn,i,HashTablei.py,HashTablei.m,HashTablei.si);asl+=HashTablei.si;asl/=NAME_LEN;/求得 ASL printf(nn 平均查找长度:ASL(%d)=%f n,NAME_LEN,asl);void FindName()山东科技大学学生课程设计山东科技大学学生课程设计/查找 char name20=0;int s=0,sum=1,adr;printf(n 请输入想要查找的姓名的拼音:);scanf(%s,name);getchar();for(j=0;j20;j+)/求出姓名的拼音所对应的 ASCII 作为关键字 s+=toascii(namej);adr=s%P;/除留余数法 j=0;if(HashTableadr.m=s&!strcmp(HashTableadr.py,name)/分 3 种情况进行判断,并输出超找结果 printf(n 姓名:%s 关键字:%d 查找长度为:1n,HashTableadr.py,s);else if(HashTableadr.m=0)printf(没有想要查找的人!n);else while(1)adr=(adr+dj+)%HASH_LEN;/伪随机探测再散列法处理冲突 sum=sum+1;/查找次数加 1 if(HashTableadr.m=0)printf(没有想要查找的人!n);break;if(HashTableadr.m=s&!strcmp(HashTableadr.py,name)printf(n 姓名:%s 关键字:%d 查找长度为:%dn,HashTableadr.py,s,sum);break;int main()/主函数 char c;int a=1;srand(int)time(0);for(i=0;i30;i+)/用随机函数求得伪随机数列 di(在 1 到 50 之间)di=1+(int)(HASH_LEN*rand()/(RAND_MAX+1.0);InitNameTable();CreateHashTable();printf(*n);printf(*n);printf(*哈希表设计 *n);printf(*n);printf(*A:显示姓名表 B:显示哈希表 *n);printf(*n);printf(*C:查找 D:退出 *n);printf(*n);山东科技大学学生课程设计山东科技大学学生课程设计 printf(*n);while(a)printf(n 请选择:);scanf(%c,&c);getchar();switch(c)/根据选择进行判断,直到选择退出时才可以退出 case A:case a:DisplayNameTable();break;case B:case b:DisplayHashTable();break;case C:case c:FindName();break;case D:case d:a=0;break;default:printf(n 请输入正确的选择!n);break;return 0;四、调试分析四、调试分析编译环境为编译环境为 CodeBlocks。山东科技大学学生课程设计山东科技大学学生课程设计山东科技大学学生课程设计山东科技大学学生课程设计山东科技大学学生课程设计山东科技大学学生课程设计展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




哈希表设计-数据结构课程设计.pdf



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/11019928.html