本文主要是介绍二分法在顺序排列的字典中查找单词(二分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用二分法在顺序排列的字典中查找单词
typedef struct{ char word[20];/*单词名*/int count; /*单词计数器*/}KeyTab; KeyTab tab[M];
若找到,该单词计数器增1;若没找到,字典新增一个单词
根据题意自己写的代码,有可能有些错误,大家借鉴着看一下吧。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define inf 0x3f3f3f3f
#define M 1010typedef struct{char word[20];int count;
}KeyTab;
KeyTab tab[M];int main()
{int i;for(i=0;i<M;i++) tab[i].count=0,memset(tab[i].word,'\0',sizeof(tab[i].word));//初始化char s[20];int cnt=0;//单词计数 printf("请依次输入单词\n");while(1){scanf("%s",s);if(strcmp(s,"#")==0) break;if(cnt==0) tab[0].count++,strcpy(tab[0].word,s),cnt++;else{int l=0,r=cnt-1,mid,pos;while(l<=r)//二分{mid=l+r>>1;if(strcmp(tab[mid].word,s)<0) l=mid+1;else if(strcmp(tab[mid].word,s)>0) r=mid-1;else break;}if(strcmp(tab[mid].word,s)==0) tab[mid].count++;else{for(i=cnt;i>l;i--) tab[i]=tab[i-1];strcpy(tab[l].word,s);tab[l].count=1;cnt++;}}}for(i=0;i<cnt;i++) printf("%s %d\n",tab[i].word,tab[i].count);return 0;
}
主要是对二分法和结构体的考察。
努力加油a啊,(o)/~
这篇关于二分法在顺序排列的字典中查找单词(二分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!