欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构 散列表 除留余数法 线性探测法解决冲突

发布时间:2023/12/14 编程问答 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 数据结构 散列表 除留余数法 线性探测法解决冲突 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

已知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; }

代码输出结果为

总结

以上是生活随笔为你收集整理的数据结构 散列表 除留余数法 线性探测法解决冲突的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。