数据结构课程设计哈夫曼编码译码器_第1页
数据结构课程设计哈夫曼编码译码器_第2页
数据结构课程设计哈夫曼编码译码器_第3页
数据结构课程设计哈夫曼编码译码器_第4页
数据结构课程设计哈夫曼编码译码器_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计哈夫曼编码译码器数据结构课程设计哈夫曼编码译码器数据结构课程设计哈夫曼编码译码器数据结构课程设计哈夫曼编码译码器编制仅供参考审核批准生效日期地址:电话:传真:邮编:题目一:哈夫曼编码与译码一、任务设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。要求:1)

将权值数据存放在数据文件(文件名为,位于执行程序的当前目录中);2)

初始化:键盘输入字符集统计字符权值、自定义26个字符和26个权值、统计文件中一篇英文文章中26个字母,建立哈夫曼树;3)

编码:利用建好的哈夫曼树生成哈夫曼编码;4)

输出编码(首先实现屏幕输出,然后实现文件输出);5)译码(键盘接收编码进行译码、文件读入编码进行译码);6)

界面优化设计。二、流程图主菜单主菜单1.建立字符权值1.编码2.译码0.返回上级菜单三、代码分解立字符权值=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*==*\n");printf("\t\t*=2.建立并输出哈夫曼树=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*==*\n");printf("\t\t*=3.生成并查看哈夫曼编码=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*==*\n");printf("\t\t*=4.编码与译码=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*==*\n");printf("\t\t*=0.退出系统=*\n");printf("\t\t*==*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\n\t\t请输入序号进行选择:");scanf("%d",&xh);returnxh;码=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t\t*=2.译码=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t\t*=0.返回上级菜单=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\n\t\t请输入序号进行选择:");scanf("%d",&xh); switch(xh)盘输入编码进行译码=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t\t*=2.文件读入编码进行译码=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t\t*=0.返回上级菜单=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\n\t\t请输入序号进行选择:");scanf("%d",&xh); switch(xh)盘输入字符集编码=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t\t*=2.文件读入文章编码=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t\t*=0.返回上级菜单=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\n\t\t请输入序号进行选择:");scanf("%d",&xh); switch(xh)键盘输入字符集进行统计=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t\t*=2.从文件读入字符集统计=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t\t*=3.自定义字符权值=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\t\t*=0.返回上级菜单=*\n");printf("\t\t*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*\n");printf("\n\t\t请输入序号进行选择:");scanf("%d",&xh2); switch(xh2)xt):"); scanf("%s",&filename); if((fp=fopen(filename,"r"))==NULL) { printf("\n\t\t文件打开失败!!!"); return; } for(i=0;!feof(fp);i++) { fread(&[i],sizeof(char),1,fp); } =strlen; printf("读入成功!\n"); printf("文件中的字符集为:%s\n",; fclose(fp); count(ch,ht); printf("按任意键返回!"); getch(); system("cls"); return;}voidinput_cw(HTNodeht[]){ inti,w,s,j; chara; printf("要输入的字符总个数是:"); scanf("%d",&s); n=s; printf("请输入字符及其权值:\n"); for(i=0;i<s;i++) { printf("请输入第%d个字母:",i+1); scanf("%s",&a); ht[i].data=a; printf("请输入其权值:"); scanf("%d",&w); ht[i].weight=w; } FILE*fp; if((fp=fopen("","w"))==0) { printf("\n\t\t文件打开失败!!!"); return; } printf("\n定义权值成功!\n\n"); printf("各字符及其权值为:\n\n"); fprintf(fp,"各字符及其权值为:\n"); printf("字符\t权值"); fprintf(fp,"字符\t权值"); for(j=0;j<i;j++) { printf("\n"); fprintf(fp,"\n"); printf("%-8c%-8d",ht[j].data,ht[j].weight); fprintf(fp,"%-8c%-8d%",ht[j].data,ht[j].weight); } printf("\n"); printf("\n字符权值已输出至文件“”!"); fclose(fp); printf("输入完成,按任意键返回!"); getch(); system("cls"); return;}ata=c[i]; ht[i].weight=sum[i]; } n=m; FILE*fp; if((fp=fopen("","w"))==0) { printf("\n\t\t文件打开失败!!!"); return; } printf("\n统计权值成功!\n\n"); printf("各字符及其权值为:\n\n"); fprintf(fp,"各字符及其权值为:\n"); printf("字符\t权值"); fprintf(fp,"字符\t权值"); for(j=0;j<m;j++) { printf("\n"); fprintf(fp,"\n"); printf("%-8c%-8d",ht[j].data,ht[j].weight); fprintf(fp,"%-8c%-8d%",ht[j].data,ht[j].weight); } printf("\n"); printf("\n字符权值已输出至文件“”!"); fclose(fp);}xt","w"))==0) { printf("\n\t\t文件打开失败!!!"); return; } inti,j,k,lnode,rnode;intmin1,min2;for(i=0;i<2*n-1;i++)ht[i].parent=ht[i].lchild=ht[i].rchild=-1;for(i=n;i<2*n-1;i++) { min1=min2=32767;lnode=rnode=-1;for(k=0;k<=i-1;k++)if(ht[k].parent==-1) { if(ht[k].weight<min1) { min2=min1;rnode=lnode;min1=ht[k].weight;lnode=k; } elseif(ht[k].weight<min2) { min2=ht[k].weight;rnode=k; } } ht[lnode].parent=i;ht[rnode].parent=i; ht[i].weight=ht[lnode].weight+ht[rnode].weight; ht[i].lchild=lnode;ht[i].rchild=rnode; } printf("建立huffman树成功!\n"); printf("输出huffman树:\n"); fprintf(fp,"输出huffman树:\n"); printf("\t字符\t权值\t父节点\t左子节点\t右子节点"); fprintf(fp,"\t字符\t权值\t父节点\t左子节点\t右子节点"); for(j=1;j<i;j++) { printf("\n"); fprintf(fp,"\n"); printf("\t%-8c%-8d%-10d%-14d%-10d",ht[j].data,ht[j].weight,ht[j].parent,ht[i].lchild,ht[j].rchild); fprintf(fp,"\t%-8c%-8d%-10d%-14d%-10d",ht[j].data,ht[j].weight,ht[j].parent,ht[i].lchild,ht[j].rchild); } printf("\n"); printf("哈夫曼树已输出至文件“哈夫曼树.txt”!按任意键返回!"); fclose(fp); getch(); system("cls"); return;}arent; while(f!=-1) { if(ht[f].lchild==c)[]='0'; else[]='1';c=f;f=ht[f].parent; }++; for(j=0;j<;j++)[j]='';hcd[i]=hc; }}voidDispHCode(HTNodeht[],HCodehcd[],intn){ FILE*fp; if((fp=fopen("哈夫曼编码.txt","w"))==0) { printf("\n\t\t文件打开失败!!!"); return; } inti,k;intsum=0,m=0,j;printf("输出字符哈夫曼编码:\n"); fputs("输出字符哈夫曼编码:\n",fp);for(i=0;i<n;i++) { j=0;printf("%c:\t",ht[i].data); fprintf(fp,"\n%c:\t",ht[i].data);for(k=hcd[i].start;k<=n;k++) { printf("%c",hcd[i].cd[k]);j++;fprintf(fp,"%c",hcd[i].cd[k]); } m+=ht[i].weight;sum+=ht[i].weight*j;printf("\n"); } printf("\n哈夫曼编码已保存至文件“哈夫曼编码.txt!按任意键返回!”"); fclose(fp); getch();system("cls");}xt):"); scanf("%s",&filena

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论