您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 为班级30个人的姓名设计一个哈希表-假设姓名用汉语拼音表示....
为班级30个人的姓名设计一个哈希表,假设姓名用汉语拼音表示。(关键字可视为拼音首字母的序号)要求用除留余数法构造哈希函数,用线性探测再散列法处理冲突,平均查找长度的上限是2。#includeiostream#includestringusingnamespacestd;#defineM47//随机数#definen50//哈希表长#defineq30//人数structname{char*py;intk;};nameNameList[n];structhash{char*py;intk;intsi;};hashhashlist[n];voidlistname(){char*f;ints0,r,i;NameList[0].py=baojie;NameList[1].py=chengaoyang;NameList[2].py=chenguangzhong;NameList[3].py=chenliangliang;NameList[4].py=chenyongzhou;NameList[5].py=fengchao;NameList[6].py=gexiangfeng;NameList[7].py=huting;NameList[8].py=huangpinjin;NameList[9].py=jiangxiaojia;NameList[10].py=laidongjie;NameList[11].py=liyexiao;NameList[12].py=lidaohui;NameList[13].py=lijue;NameList[14].py=lizhuoqun;NameList[15].py=linfujun;NameList[16].py=luobin;NameList[17].py=luokeqing;NameList[18].py=nichao;NameList[19].py=panhuafeng;NameList[20].py=sijun;NameList[21].py=songzhanhui;NameList[22].py=sunzhengqing;NameList[23].py=wanghaofeng;NameList[24].py=wangjunshuai;NameList[25].py=wangqinde;NameList[26].py=wangzejun;NameList[27].py=wangkeke;NameList[28].py=weixing;NameList[29].py=wurenke;for(i=0;iq;i++){s0=0;f=NameList[i].py;for(r=0;*(f+r)!='\0';r++)s0+=*(f+r);NameList[i].k=s0;}}voidcreathash(){inti;for(i=0;in;i++){hashlist[i].py=;hashlist[i].k=0;hashlist[i].si=0;}for(i=0;iM;i++){intsum=0;intadr=(NameList[i].k)%M;intd=adr;if(hashlist[adr].si==0){hashlist[adr].k=NameList[i].k;hashlist[adr].py=NameList[i].py;hashlist[adr].si=1;}else{while(hashlist[d].k!=0){d=(d+NameList[i].k%10+1)%M;sum=sum+1;}hashlist[d].k=NameList[i].k;hashlist[d].py=NameList[i].py;hashlist[d].si=sum+1;}}}voidfindlist(){stringnam;ints0=0,r,sum=1;cout请输入姓名的拼音:endl;cinnam;for(r=0;r20;r++)s0+=nam[r];intadr=s0%M;intd=adr;if(hashlist[adr].k==s0)cout姓名:hashlist[adr].py关键字:s0查找长度为:1endl;elseif(hashlist[adr].k==0)cout无此记录!endl;else{intg=0;while(g==0){d=(d+s0%10+1)%M;sum=sum+1;if(hashlist[d].k==0){cout无此记录!endl;g=1;}if(hashlist[d].k==s0){cout姓名:hashlist[adr].py关键字:s0查找长度为:1endl;g=1;}}}}voiddisplay(){inti;for(i=0;i30;i++)coutNameList[i].pyNameList[i].kendl;}intmain(){charx;listname();creathash();coutd.显示哈希表f.查找任意键退出请选择endl;while(cinx){if(x=='d'){display();coutendl;}elseif(x=='f'){findlist();coutendl;}elsebreak;}return0;}
本文标题:为班级30个人的姓名设计一个哈希表-假设姓名用汉语拼音表示....
链接地址:https://www.777doc.com/doc-2400169 .html