数据结构哈希表设计.docx
- 文档编号:4102670
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:10
- 大小:33.24KB
数据结构哈希表设计.docx
《数据结构哈希表设计.docx》由会员分享,可在线阅读,更多相关《数据结构哈希表设计.docx(10页珍藏版)》请在冰豆网上搜索。
数据结构哈希表设计
实验六:
存储管理、查找和排序
题目:
哈希表设计
班级:
姓名:
学号:
一、问题描述
针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度均不超过R,完成相应的建表和查表顺序。
二、大体要求
假设人名为中国人姓名的汉语拼音形式。
待填入哈希表的人名共有30个,取平均查找长度的上限为2。
哈希函数用除留余数法构造,用伪随机探测再散列法处置冲突。
三、概要设计
1.构造结构体:
typedefstruct{};
2.姓名表的初始化:
voidInitNameTable();
3.成立哈希表:
voidCreateHashTable();
4.显示姓名表:
voidDisplayNameTable();
5.姓名查找:
voidFindName();
6.主函数:
voidmain() ;
四、详细设计
1.姓名表的初始化
voidInitNameTable()
{
NameTable[0].py="louyuhong";
NameTable[1].py="shenyinghong";
NameTable[2].py="wangqi";
NameTable[3].py="zhuxiaotong";
NameTable[4].py="zhataotao";
NameTable[5].py="chenbinjie";
NameTable[6].py="chenchaoqun";
NameTable[7].py="chencheng";
NameTable[8].py="chenjie";
NameTable[9].py="chenweida";
NameTable[10].py="shanjianfeng";
NameTable[11].py="fangyixin";
NameTable[12].py="houfeng";
NameTable[13].py="hujiaming";
NameTable[14].py="huangjiaju";
NameTable[15].py="huanqingsong";
NameTable[16].py="jianghe";
NameTable[17].py="jinleicheng";
NameTable[18].py="libiao";
NameTable[19].py="liqi";
NameTable[20].py="lirenhua";
NameTable[21].py="liukai";
NameTable[22].py="louhanglin";
NameTable[23].py="luchaoming";
NameTable[24].py="luqiuwei";
NameTable[25].py="panhaijian";
NameTable[26].py="shuxiang";
NameTable[27].py="suxiaolei";
NameTable[28].py="sunyubo";
NameTable[29].py="wangwei";
for(i=0;i for(j=0;*(p+j)! ='\0';j++) s+=toascii(*(p+j)); NameTable[i].m=s; } } 2.成立哈希表 voidCreateHashTable() { for(i=0;i { HashTable[i].py="\0"; HashTable[i].m=0; HashTable[i].si=0; } for(i=0;i { intsum=1,j=0; intadr=(NameTable[i].m)%P; i==0) =NameTable[i].m; HashTable[adr].py=NameTable[i].py; HashTable[adr].si=1; } else i! =0) { adr=(adr+d[j++])%HASH_LEN; =NameTable[i].m; y=NameTable[i].py; HashTable[adr].si=sum; } } } 3.显示姓名表与哈希表 voidDisplayNameTable() { printf("\n地址\t\t姓名\t\t关键字\n"); for(i=0;i printf("%2d%18s\t\t %d \n",i,NameTable[i].py,NameTable[i].m); } voidDisplayHashTable() { floatasl=; printf("\n\n地址\t\t姓名\t\t关键字\t搜索长度\n");y,HashTable[i].m,HashTable[i].si); asl+=HashTable[i].si; } asl/=NAME_LEN; ==s&&! strcmp(HashTable[adr].py,name)) y,s); elseif(HashTable[adr].m==0) printf("没有想要查找的人! \n"); else { while (1) { adr=(adr+d[j++])%HASH_LEN; ==0) { printf("没有想要查找的人! \n"); break; } if(HashTable[adr].m==s&&! strcmp(HashTable[adr].py,name)) { printf("\n姓名: %s 关键字: %d 查找长度为: %d\n",HashTable[adr].py,s,sum); break; } } } } 五、测试结果 六、实验环境 C-Free 七、源程序代码 #include<> #include<>y="louyuhong"; NameTable[1].py="shenyinghong"; NameTable[2].py="wangqi"; NameTable[3].py="zhuxiaotong"; NameTable[4].py="zhataotao"; NameTable[5].py="chenbinjie"; NameTable[6].py="chenchaoqun"; NameTable[7].py="chencheng"; NameTable[8].py="chenjie"; NameTable[9].py="chenweida"; NameTable[10].py="shanjianfeng"; NameTable[11].py="fangyixin"; NameTable[12].py="houfeng"; NameTable[13].py="hujiaming"; NameTable[14].py="huangjiaju"; NameTable[15].py="huanqingsong"; NameTable[16].py="jianghe"; NameTable[17].py="jinleicheng"; NameTable[18].py="libiao"; NameTable[19].py="liqi"; NameTable[20].py="lirenhua"; NameTable[21].py="liukai"; NameTable[22].py="louhanglin"; NameTable[23].py="luchaoming"; NameTable[24].py="luqiuwei"; NameTable[25].py="panhaijian"; NameTable[26].py="shuxiang"; NameTable[27].py="suxiaolei"; NameTable[28].py="sunyubo"; NameTable[29].py="wangwei"; for(i=0;i for(j=0;*(p+j)! ='\0';j++) s+=toascii(*(p+j)); NameTable[i].m=s; } } voidCreateHashTable()y="\0"; HashTable[i].m=0; HashTable[i].si=0; } for(i=0;i { intsum=1,j=0; intadr=(NameTable[i].m)%P;i==0)=NameTable[i].m; HashTable[adr].py=NameTable[i].py; HashTable[adr].si=1; } elsei! =0) { adr=(adr+d[j++])%HASH_LEN;=NameTable[i].m;y=NameTable[i].py; HashTable[adr].si=sum; } } } voidDisplayNameTable()y,NameTable[i].m); } voidDisplayHashTable()y,HashTable[i].m,HashTable[i].si); asl+=HashTable[i].si; } asl/=NAME_LEN;==s&&! strcmp(HashTable[adr].py,name))y,s); elseif(HashTable[adr].m==0) printf("没有想要查找的人! \n"); else { while (1) { adr=(adr+d[j++])%HASH_LEN;==0) { printf("没有想要查找的人! \n"); break; } if(HashTable[adr].m==s&&! strcmp(HashTable[adr].py,name)) { printf("\n姓名: %s关键字: %d查找长度为: %d\n",HashTable[adr].py,s,sum); break; } } } } intmain()显示姓名表"); puts("\t\t\t2.显示哈希表"); puts("\t\t\t3.查找"); puts("\t\t\t4.退出"); puts("*----------------------------------------------------------------*"); restart: printf("\n\t请选择: "); scanf("%s",&a); switch(a)//按照选择进行判断,直到选择退出时才能够退出 { case'1': DisplayNameTable(); break; case'2': DisplayHashTable(); break; case'3': FindName(); break; case'4': exit(0); break; default: printf("\n请输入正确的选择! \n"); gotorestart; } gotostart; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 哈希表 设计