1、哈希查找算法的源代码c语言【问题描述】针对自己的班集体中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。基本要求假设人名为中国姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构照,用链表法处理冲突。测试数据读取熟悉的30个人的姓名。#include
2、typedefrecord*precord;structHashTableintelemMaxsize;存放数组a的下标intcount;typedefHashTable*pHashTable;intNumber;/统计当前数组a中的记录总数voidGetdata(precorda)/从文件telphone.txt中读取数据存放到数组aNumber=0;ifstreaminfile("telphone.txt",ios二in|ios二binary);if(!infile)cout<<"文件打开失败!n"exit(1);while(!infil
3、e.eof()&&infile.get()!=EOF)/文件不为空并且文件指针没有指到结束符infile.seekg(Number*sizeof(aNumber),ios:beg);/定位文件指针infile.read(char*)&aNumber,sizeof(aNumber);Number+;)infile.close();)voidAdd(precorda)/添加记录inti,num;cout<<"当前文件内已有"< 4、加的个数:"cin>>num;ofstreamofile("telphone.txt",ios二app);if(!ofile)cout<<"文件打开失败!";exit(1);for(i=0;i 7、al=val+*p1+;/将字符串中的所有字符对应的ASCII值相加return(val%Maxsize);)intderter;/线性增量intLine_Sollution(intaddress)/采用线性探测解决冲突(derter+;if(derter=Maxsize)return(-1);elsereturn(address+derter)%Maxsize);)intn;intSquare_Sollution(intaddress)/采用平方探测法解决冲突intj;derter+;if(derter=Maxsize)return-1;n=n*(-1);j=(int(pow(derter, 8、2)*n+address)%Maxsize;return(j);)voidInit_Hash(pHashTableh)/初始化哈希表inti;for(i=0;i 9、ess;cin>>menu;Init_Hash(h);for(i=0;i 10、"voidSearch_Name(pHashTableh,precorda)/查找并显示指定姓名的记录cout<<”请输入要查找的姓名:”;charnam20;intaddress,i=1;cin>>nam;address=Hash(nam);derter=0;n=-1;while(h->elemaddress!=-1&&strcmp(nam,ah->)!=0)if(menu=1)address=Line_Sollution(address);elseaddress=Square_Sollution(