您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 数据结构课设——单词统计
5.基本功能要求:(1)从文件中读出一篇英文文章,将不同的单词存入堆中,建立相应的索引表确定各单词在堆中存储的位置及出现的次数。(参考第四章应用举例—图书馆关键字或教材P86)(2)按出现的频率递减的次序输出。#includestdio.h#includestdlib.h#includemalloc.h#defineMaxSize33typedefstructvoc{intn;charp[MaxSize];}Word;typedefstructnode{Wordw;structnode*next;}LinkWord;LinkWord*Initnode(void){LinkWord*L=(LinkWord*)malloc(sizeof(LinkWord));L-next=NULL;L-w.n=0;return(L);}voidclear(charp[],intn)//清空c数组{inti=0;for(i=0;in;p[i++]='\0');}voidstorage(charp[],charc[])//将数组c中的单词存入数组p中{while(*p++=*c++);}intcompare(charconstp[],charconstc[])//判断p中的单词与c中的单词是否相同{for(;*p!='\0'&&c!='\0';)if(*p++!=*c++)return0;return(*p=='\0'&&*c=='\0')?1:0;}voidDeal(LinkWord*L,charc[])//单词处理{LinkWord*p=L;while(p-next!=NULL)//查找链表中是否存在该单词{p=p-next;if(compare(p-w.p,c))//调用比较函数{p-w.n++;//若相同则将此单词数加1return;}}if(p-next==NULL)//不存在的话就放在链表最后{p-next=Initnode();p-next-w.n=1;storage(p-next-w.p,c);//将c中的单词存入}}voidDeletNode(LinkWord*&l,LinkWord*&p)//删除l链表中的p指向的节点{LinkWord*q=l;while(q-next!=p)q=q-next;q-next=p-next;free(p);}voidmain(){charc[MaxSize]=;inti=0,max=0;charch='\0';LinkWord*L,*s,*r,*q;L=Initnode();s=L;r=q=NULL;FILE*fp1;if((fp1=fopen(fread1.dat,r))==NULL){printf(cannotopenthefile\n);exit(1);}while((ch=fgetc(fp1))!=EOF){if((ch=65&&ch=90)||(ch=97&&ch=122)){c[i++]=ch;continue;}if((c[0]=65&&c[0]=90)||(c[0]=97&&c[0]=122))Deal(L,c);//处理单词clear(c,MaxSize);i=0;}fclose(fp1);while(q=r=s-next){if(r==NULL)break;while(q!=NULL){if(q-w.nr-w.n)r=q;q=q-next;}printf(%s%5d\n,r-w.p,r-w.n);DeletNode(s,r);//删除s链表中的指向的节点}free(L);}七、实验结果截图:
本文标题:数据结构课设——单词统计
链接地址:https://www.777doc.com/doc-6044913 .html