数据结构实验之哈希查找.doc_第1页
数据结构实验之哈希查找.doc_第2页
数据结构实验之哈希查找.doc_第3页
数据结构实验之哈希查找.doc_第4页
数据结构实验之哈希查找.doc_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构实验之哈希查找#include#include#include#include#define SIZE 11#define NAMENUM 5#define MANELEN 20#define RSIZE 99typedef structchar nameMANELEN;HashTable;void Createrand(int random);void NameArray(char nameNAMENUMMANELEN);int Hash(int key);int Hashrand(int random,int key,int k);/void Strcpy(char *S1,char *S2);/int StrCmp(char *S1,char *S2);void Hashsearch(char S,int &count,int &location,int random,char nameNAMENUMMANELEN) ;void main()int i,j,k=0,key=0,count=0,total=0,location=0,index=0,randomRSIZE;char tempMANELEN=0,nameNAMENUMMANELEN;HashTable HTSIZE;for(i=0;iSIZE;i+)HT0=0;NameArray(name); /创建姓名表Createrand(random); /创建伪随机数组 for(i=0;iNAMENUM;i+) /将NAMENUM个名字散列到Hash表中strcpy(temp,namei);for(j=0;tempj!=0;j+)key+=(tempj-a)*(tempj-a); /姓名中每个字母与a的ASCII码值之差的平方和作为其关键值printf(关键值为:%dn,key);index=Hash(key); /利用Hash函数计算下标值printf(下标为:%dn,index);if(HT=0) /若该位置空strcpy(HT,temp); /复制到表中相应位置else /若不空,即冲突 k=0;while(HT!=NULL) /只要不空就利用Hashrand函数再次计算下标,直到找到空的位置index=Hashrand(random,key,k);k+;strcpy(HT,temp); /复制到表中相应位置printf(1234567890); /Hash表建立完毕for(i=0;iNAMENUM;i+) /求质量因子Hashsearch(namei,count,location,random,name); /查找并计算该名字在表中位置及查找次数printf(%s查找了%d次,在表中第%d位n,namei,count,location);total+=count; /统计总查找次数printf(总查找次数为%d,total);printf(质量因子为%4.2f,(float)(NAMENUM/total); /求质量因子完毕printf(请任意输入一个待查找的名字:);/任意输入的查找scanf(%s,temp);Hashsearch(temp,count,location,random,name);if(location!=-1)printf(%s查找了%d次,在表中第%d位n,temp,count,location);else printf(无此姓名!n);void Createrand(int random)int i,tag=0;/printf(伪随机数组为:n);for(i=0;iRSIZE;i+)tag+;randomi=rand()%(10*RSIZE);/printf(%-4d,randomi);/if(tag%5=0) /printf(n);/printf(n);void NameArray(char nameNAMENUMMANELEN)int i,j=0,num;num=NAMENUM; printf(请输入%d个学生姓名:n,num);for(i=0;inum;i+)doscanf(%c,&nameij);j+;while(nameij-1!=n);nameij=0;namenum0=0;int Hash(int key)int index;index=key%SIZE;return index;int Hashrand(int random,int key,int k)int index;index=(Hash(key)+(k*k)%SIZE;return index;/*void Strcpy(char *S1,char *S2)int i=0;while(S2i!=0)S1i=S2i;i+;S1i=0;*/*int StrCmp(char *S1,char *S2)int i=0,flag=0;while(S1i=S2i)&(S1i!=0)i+;if(S1i=0)&(S2i=0)flag=1;return flag;*/void Hashsearch(char S,int &count,int &location,int random,char nameNAMENUMMANELEN)int i,index,key=0,flag;for(i=0;Si!=0;i+)key+=(Si-a)*(Si-a); count=1;location=-1;index=Hash(key);flag=strcmp(S,nameindex);if(flag=1)location=index;return;elsedoco

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论