数据结构 散列表 除留余数法 线性探测法解决冲突
生活随笔
收集整理的这篇文章主要介绍了
数据结构 散列表 除留余数法 线性探测法解决冲突
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
已知9名学生的信息,每个学生信息包括编号和姓名。学生信息为11,王红,22,刘军,47,王亮,92,张强,16,吴迪,3,李伟,7,赵磊,29,钱鹤,8,孙芳。用散列表实现以编号为关键码的查找。散列函数使用除留余数法,散列表长11,即Hash(key)=key%11。用线性探测法解决冲突。要求从文本文件中读取学生信息(相邻数据间用空白符分隔,且姓名不含有空白符),建立散列表,然后输入学生编号,查找并显示学生姓名
文件的实现还是需要自己写一个文本文件。
- #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct {int sno;char name[10]; }student;void creat(student t,student s[],int i) {int n;n=t.sno%11;if(s[n].sno==0) s[n]=t;else {while(s[n%11].sno!=0)n++;s[n]=t; } } void ini(student s[],int n) {int i;for(i=0;i<n;i++){s[i].sno=0;} } void find(int f,student s[],int n) {int i,j;for(i=f%11,j=0;j<11;j++,i=(i+1)%11){if(s[i].sno==f) {printf("%d %s\n",s[i].sno,s[i].name);break;}}if(j==11)printf("未找到该学生信息!\n"); } int main() {int i=1,f;char c;char filename[80];FILE *fp;student s[11],t;ini(s,11);puts("请输入文本文件地址:");gets(filename);if((fp=fopen(filename,"r"))==NULL){printf("文件打开失败!\n");return 0;}while(!feof(fp)){fscanf(fp,"%d %s ",&t.sno,&t.name);creat(t,s,11);}fclose(fp);for(i=0;i<10;i++){printf("%d %s\n",s[i].sno,s[i].name);}do{printf("请输入查找学生编号(0结束)\n");scanf("%d",&f);if(f) find(f,s,11);}while(f); return 0; }
代码输出结果为
总结
以上是生活随笔为你收集整理的数据结构 散列表 除留余数法 线性探测法解决冲突的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 《自控力》的读后感作文4000字
- 下一篇: CTF图片隐写入门