欢迎来到天天文库
浏览记录
ID:39473715
大小:73.50 KB
页数:7页
时间:2019-07-04
《哈希表实习报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实习7哈希表设计【设计思想】一般的线性表、树中,记录在结构中的相对位置是随机的即和记录的关键字之间不存在确定的关系,在结构中查找记录时需进行一系列和关键字的比较。这一类查找方法建立在“比较”的基础上,查找的效率与比较次数密切相关。理想的情况是能直接找到需要的记录,因此必须在记录的存储位置和它的关键字之间建立一确定的对应关系f,使每个关键字和结构中一个唯一的存储位置相对应。因而查找时,只需根据这个对应关系f找到给定值K的像f(K)。若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上,由此不需要进行比较便可直接取得所查记录。在此,称这个对应关系f为哈希函数,按这个思想建立哈希
2、表(又称为杂凑法或散列表)。【主要算法】typedefstructNAME{char*py;//名字的拼音intk;//拼音所对应的整数NAMENameList[HASH_LEN];typedefstructhterm//哈希表{char*py;//名字的拼音intk;//拼音所对应的整数intsi;//查找长度}HASH;voidInitNameList(){NameList[0].py="baifang";//自定义30个姓名NameList[1].py="bufei";NameList[2].py="cenze";NameList[3].py="chenyan";NameLis
3、t[4].py="chenglingqiu";NameList[5].py="dingyucheng";NameList[6].py="fengyuyu";NameList[7].py="fanzhenchao";NameList[8].py="jiangchengchang";NameList[9].py="lizechen";NameList[10].py="liangshirui";NameList[11].py="liangbiao";NameList[12].py="lianzheng";NameList[13].py="liuxiang";NameList[14].py=
4、"songfan";NameList[15].py="shangxuezhi";NameList[16].py="tangzhigang";NameList[17].py="wukaiyu";NameList[18].py="zhongyang";NameList[19].py="kongrongping";NameList[20].py="wuxiaomei";NameList[21].py="liuwei";NameList[22].py="lujunming";NameList[23].py="zhangjun";NameList[24].py="zhangwei";NameL
5、ist[25].py="dengchangsong";NameList[26].py="huangyuan";NameList[27].py="zhouyanping";NameList[28].py="shanbaocai";NameList[29].py="shengyingying";char*f;intr,s0;for(inti=0;i6、r].si==0)//如果不冲突{HashList[adr].k=NameList[i].k;HashList[adr].py=NameList[i].py;HashList[adr].si=1;}else//冲突{do{d=(d+((NameList[i].k))%10+1)%M;//伪散列sum=sum+1;//查找次数加一}while(HashList[d].k!=0);HashList[d].k=NameList[i].k;HashList[d].py=NameList[i].py;HashList[d].si=sum+1;}}}voidFindList(){charname7、[20]={0};scanf("%s",name);ints0=0;for(intr=0;r<20;r++)//求出拼音所对应的整数s0+=name[r];intsum=1;intadr=s0%M;//使用哈希函数intd=adr;if(HashList[adr].k==s0)//分3种情况进行判断elseif(HashList[adr].k==0)else{intg=0;do{d=(d+s0%10+1)%M;//伪散列sum=sum+1;if(HashL
6、r].si==0)//如果不冲突{HashList[adr].k=NameList[i].k;HashList[adr].py=NameList[i].py;HashList[adr].si=1;}else//冲突{do{d=(d+((NameList[i].k))%10+1)%M;//伪散列sum=sum+1;//查找次数加一}while(HashList[d].k!=0);HashList[d].k=NameList[i].k;HashList[d].py=NameList[i].py;HashList[d].si=sum+1;}}}voidFindList(){charname
7、[20]={0};scanf("%s",name);ints0=0;for(intr=0;r<20;r++)//求出拼音所对应的整数s0+=name[r];intsum=1;intadr=s0%M;//使用哈希函数intd=adr;if(HashList[adr].k==s0)//分3种情况进行判断elseif(HashList[adr].k==0)else{intg=0;do{d=(d+s0%10+1)%M;//伪散列sum=sum+1;if(HashL
此文档下载收益归作者所有