哈希查找算法的源代码 c语言.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈希查找算法的源代码 c语言 【问题描述】 针对自己的班集体中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。 [基本要求] 假设人名为中国姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构照,用链表法处理冲突。 [测试数据] 读取熟悉的30个人的姓名。 #include fstream #include iostream #include cmath using namespace std; #define Maxsize 57 struct record { char name[20]; char tel[20]; char add[20]; }; typedef record * precord; struct HashTable { int elem[Maxsize]; //存放数组a[]的下标 int count; }; typedef HashTable * pHashTable; int Number; //统计当前数组a[]中的记录总数 void Getdata(precord a) //从文件telphone.txt中读取数据存放到数组a[] { Number=0; ifstream infile(telphone.txt,ios::in|ios::binary); if(!infile) {cout文件打开失败!\n; exit(1);} while(!infile.eof() infile.get()!=EOF) //文件不为空并且文件指针没有指到结束符 {infile.seekg(Number*sizeof(a[Number]),ios::beg); //定位文件指针 infile.read((char *)a[Number],sizeof(a[Number])); Number++; } infile.close(); } void Add(precord a) //添加记录 { int i,num; cout当前文件内已有Number条记录\n; cout请输入添加的个数:; cinnum; ofstream ofile(telphone.txt,ios::app); if(! ofile) {cout文件打开失败!; exit(1);} for(i=0;inum;i++) { cout请输入第Number+1个人的姓名endl; cina[Number].name; cout请输入第Number+1个人的电话endl; cina[Number].tel; cout请输入第Number+1个人的地址endl; cina[Number].add; ofile.seekp(ios::end); ofile.write((char *)a[Number],sizeof(a[Number])); Number++; } ofile.close(); } void Print(precord a) //显示所有记录 { int i; for(i=0;iNumber;i++) { cout第i+1个人的信息为:\n; cout 姓名:a[i].nameendl; cout 电话:a[i].telendl; cout 地址:a[i].addendl; } } int Hash(char str[]) //除留取余 { long val=0;char p[20],*p1; strcpy(p,str); p1=p; while(*p1!=\0) val=val+*p1++; //将字符串中的所有字符对应的ASCII值相加 return(val%Maxsize); } int derter; //线性增量 int Line_Sollution(int address) //采用线性探测解决冲突 { derter++; if(derter==Maxsize) return(-1); else return((address+derter)%Maxsize); } int n; int Square_Sollution(int address) //采用平方探测法解决冲突 { int j; derter++; if(derter==Maxsize) return -1; n=n*(-1); j=(int(pow(derter,2))*n+address)%Maxsize; return(j); } void Init_Hash(pHashTable h) //初始化哈希表 { int i; for(i=0;iMaxsize;i++) h-elem[i]=-1; } int menu; void Creathash_Nam

文档评论(0)

tangdequan1 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档