数据结构课程设计--单词频率统计Word格式.docx
《数据结构课程设计--单词频率统计Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计--单词频率统计Word格式.docx(5页珍藏版)》请在冰点文库上搜索。
}Word;
typedefstructxiang
Wordw;
structxiang*next;
}LinkWord;
LinkWord*Createnote(void);
voiddealwith(LinkWord*L,charc[]);
intcompare(charconstp[],charconstc[]);
voidstorage(charp[],charc[]);
voiddisplay(LinkWordconst*L);
voidclear(charp[],intn);
voidDeletNode(LinkWord*s,LinkWord*p);
intmain(void)
charc[Max]="
"
;
inti=0,max=0;
charch='
\0'
charsource[Max]="
charend[Max]="
LinkWord*L=Createnote();
//头结点LinkWord*s=L,*p=NULL,*q=NULL;
FILE*fp1=NULL,*fp2=NULL;
printf("
请输入源文件路径:
);
gets(source);
请输入输出文件路径:
gets(end);
fp1=fopen(source,"
r"
if(fp1==NULL){printf("
Can'
topenthisfile!
\n"
exit(0);
}while((ch=fgetc(fp1))!
=EOF)
if((ch>
=65&
&
ch<
=90)||(ch>
=97&
=122))
c[i++]=ch;
continue;
}
if((c[0]>
c[0]<
=90)||(c[0]>
=122))dealwith(L,c);
//处理有效单词clear(c,Max);
i=0;
fclose(fp1);
fp2=fopen(end,"
w"
if(fp2==NULL){printf("
}while(q=p=s->
next)
if(p==NULL)break;
max=p->
w.n;
while(q!
=NULL)
if(q->
w.n>
p->
w.n)p=q;
q=q->
next;
fprintf(fp2,"
%s. %d\n"
p->
w.p,p->
w.n);
DeletNode(s,p);
//删除s链表中的p指向的结点
fclose(fp2);
free(L);
\n\n操作成功,请在%s中查看结果!
\n\n"
end);
按任意键结束!
getch();
return0;
voidDeletNode(LinkWord*s,LinkWord*p)//删除s链表中的p指向的结点
LinkWord*q=s;
while(q->
next!
=p)q=q->
next
q->
next=p->
free(p);
voidclear(charp[],intn)//清空c数组
inti=0;
for(i=0;
i<
n;
p[i++]='
)
voiddealwith(LinkWord*L,charc[])//处理c中单词
LinkWord*p=L;
while(p->
=NULL)//查找链表中是否存在这个单词
p=p->
if(compare(p->
w.p,c))
p->
w.n++;
return;
if(p->
next==NULL)//不存在就存放在最后
next=Createnote();
next->
w.n=1;
storage(p->
w.p,c);
//将c中的单词存到结点中
intcompare(charconstp[],charconstc[])//判断p中单词与c中单词是否相同
for(;
*p!
='
&
*c!
;
)if(*p++!
=*c++)return0;
return(*p=='
*c=='
)?
1:
0;
LinkWord*Createnote(void)
LinkWord*L=(LinkWord*)malloc(sizeof(LinkWord));
L->
next=NULL;
L->
w.n=0;
return(L);
voidstorage(charp[],charc[])//将数组c中的单词存到数组p中
while(*p++=*c++)
voiddisplay(LinkWordconst*L)
LinkWordconst*p=NULL;
for(p=L;
=NULL;
p=p->
next)printf("
%s..%d\n"
实验结果截图: