- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
哈希查找算法的源代码 c语言
【问题描述】
针对自己的班集体中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。
[基本要求]
假设人名为中国姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构照,用链表法处理冲突。
[测试数据]
读取熟悉的30个人的姓名。
#include fstream#include iostream#include cmathusing 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)