哈夫曼树编码&译码系统

哈夫曼树编码&译码系统

ID:25186694

大小:62.62 KB

页数:6页

时间:2018-11-18

哈夫曼树编码&译码系统_第1页
哈夫曼树编码&译码系统_第2页
哈夫曼树编码&译码系统_第3页
哈夫曼树编码&译码系统_第4页
哈夫曼树编码&译码系统_第5页
资源描述:

《哈夫曼树编码&译码系统》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、哈夫曼编码&译码系统(1)需求分析程序的功能:输入组成编码字母各个叶子的值和权值,建立哈夫曼树并生成哈夫曼编码,且能利用生成的编码对Huffman代码串进行译码,输出相应结果(2)概要设计主要设想模块示意图如下:开始构造haffman树生成haffman编码译码输入str1[];存在相应代码结束NYflag=0YN(3)详细设计哈夫曼树节点的数据类型定义:structnode{charst1[99];charst2[99];floatweight;intparent,lch,rch;};structnodeht[MAX];编码和译码功能:voidcreat(){

2、floatmin1,min2;inti=0,j=0,min11,min22;printf("输入(编码权值),输入0结束:");while(1){printf("编码%d,权值%d:",i,i);j=0;while(1){scanf("%c",&ht[i].st1[j]);if(ht[i].st1[j]==''

3、

4、ht[i].st1[j]=='0')break;j++;}if(ht[i].st1[j]=='0'){ht[i].st1[0]='';break;}ht[i].st1[j]='';scanf("%f",&ht[i].weight);sc

5、anf("%c",&ht[i].st1[++j]);i++;}n=i;for(i=0;i<2*n-1;i++){ht[i].parent=-1;ht[i].lch=-1;ht[i].rch=-1;ht[i].st2[0]='';if(ht[i].st1[0]=='')ht[i].st1[0]='';}for(i=n;i<2*n-1;i++){min2=min1=MAX;min11=min22=0;for(j=0;j

6、n1;min11=j;min1=ht[j].weight;}elseif(ht[j].weight

7、le(ht[k].parent!=-1){pr=ht[k].parent;if(k==ht[pr].lch)code[i][j]='0';elsecode[i][j]='1';j=j-1;k=pr;}c[i]=j+1;}printf("Thecodeare:");for(i=0;i

8、0(){inti=0,j=0,k=0,l=0;chara[MAX];while(str1[i]!=''){a[k++]=str1[i++];a[k]='';for(j=0;j<=n;j++){if(strcmp(a,ht[j].st2)==0){k=0;printf("%s",ht[j].st1);break;}}}}主函数输出:voidmain(){inti=0;creat();huff();printf("请输入编码:");scanf("%s",str1);huff0();scanf("");}(4)调试报告这次课程设计,我遇到了很大的问题,特别

9、是正对输入和译码的功能,我一开始设想是将编码和权值分开输入,即先输入全部编码,再输入权值,单最终没能实现,因为考虑到对应的问题,至于译码功能,一开始老是出现无法译码,或者说译码不完全,一按就导致整个EXE奔溃,后来经过查书和请教同学,终于解决,因为前面一个语句写错了。运行结果:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。