数据结构 散列表 除留余数法 线性探测法解决冲突
生活随笔
收集整理的這篇文章主要介紹了
数据结构 散列表 除留余数法 线性探测法解决冲突
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
已知9名學(xué)生的信息,每個(gè)學(xué)生信息包括編號和姓名。學(xué)生信息為11,王紅,22,劉軍,47,王亮,92,張強(qiáng),16,吳迪,3,李偉,7,趙磊,29,錢鶴,8,孫芳。用散列表實(shí)現(xiàn)以編號為關(guān)鍵碼的查找。散列函數(shù)使用除留余數(shù)法,散列表長11,即Hash(key)=key%11。用線性探測法解決沖突。要求從文本文件中讀取學(xué)生信息(相鄰數(shù)據(jù)間用空白符分隔,且姓名不含有空白符),建立散列表,然后輸入學(xué)生編號,查找并顯示學(xué)生姓名
文件的實(shí)現(xiàn)還是需要自己寫一個(gè)文本文件。
- #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("未找到該學(xué)生信息!\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("請輸入查找學(xué)生編號(0結(jié)束)\n");scanf("%d",&f);if(f) find(f,s,11);}while(f); return 0; }
代碼輸出結(jié)果為
總結(jié)
以上是生活随笔為你收集整理的数据结构 散列表 除留余数法 线性探测法解决冲突的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《自控力》的读后感作文4000字
- 下一篇: CTF图片隐写入门