哈夫曼树编码译码.pdf
《哈夫曼树编码译码.pdf》由会员分享,可在线阅读,更多相关《哈夫曼树编码译码.pdf(17页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、实 验三哈夫 曼编码/译码 器1 问题利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本,但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道)每端都需要一个完整的编/译码系统。试为这样的信息收发站写一哈夫曼编/译码系统。基本要求:(1)初始化;从终端输入字符集的大小n,以及 n 个字符和 n 个权值建立哈夫曼树。(2)输出哈夫曼树,及各字符对应的编码。(3)编码:利用建好的哈夫曼树,对输入的待发送电文进行编码。同时输入原文及编码串。(4)译码:利用建好的哈夫曼树,对输入的已接收电文进行译
2、码。同时输入编码串及原文。2 解题思路:(1)对输入的一段欲编码的字符串进行统计各个字符出现的次数,并它们转化为权值w1,w2,,wN 构成 n棵二叉树的集合F=T1,T2,,Tn 把它们保存到结构体数组HTn中,其中 Ti 是按它们的ASC码值先后排序。其中每棵二叉树Ti 中只有一个带权为Wi 的根结点的权值为其左、右子树上根结点的权值之和。(2)在 HT1.i 中选取两棵根结点的权值最小且没有被选过的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为左、右子树上根结点的权值之和。(3)哈夫曼树已经建立后,从叶子到根逆向求每一个字符的哈夫曼编码。3.结构体定义typedef s
3、truct float weight;unsigned int parent,lchild,rchild;HTNode,*HuffmanTree;typedef char*HuffmanCode;4.代码#include stdio.h#include stdlib.h#include string.h#include conio.h#define MAXSIZE 60/*定义赫夫曼树结构体*/typedef struct float weight;unsigned int parent,lchild,rchild;HTNode,*HuffmanTree;typedef char*Huffma
4、nCode;/*定义堆结构体*/typedef struct float key;/关键字项int otherinfo;/其他数据项(此题目中用不到)RedType;typedef struct RedType rMAXSIZE+1;/r0 闲置用作哨兵int length;/顺序表长度SqList;/*全局变量*/HuffmanTree HT;/赫夫曼树HuffmanCode HC;/码值FILE*fp,*fp1,*fp2;int a30=0;float b30;float*w;/权/*测试解码(可以输入一个不正确的二进制码串)*/void testdecode()char str200;/
5、存放自己输入的码子int p,p1,i;/解码的线索char ch;printf(n 请根据以上各个字符的编码输入一串二进制码字(200 个以内):n);gets(str);printf(以上码子解码后为:n);p=59;/最初令 p 为树根整数,p 由根顺着树枝一直到树叶文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编
6、码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D
7、8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编
8、码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D
9、8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编
10、码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D
11、8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2i=0;ch=stri+;while(ch!=0)for(;ch!=0&(HTp.lc
12、hild!=0|HTp.rchild!=0);)if(ch=0)p=HTp.lchild;else if(ch=1)p=HTp.rchild;else printf(n 你输入了 0,1之外的字符,无法正确译码,请检查!n);return;/直接结束 ch=stri+;/下一个码字不断的取下一个 if(p 30)printf(n 以上正确译出了前面的字符,由于你输入的二进制码不完整,最后一位字符无法译出,请检查!n);/*下面是解码*/void decode()int p;char ch;printf(nn对码子解码后的如下:n);fp1=fopen(bianma.txt,r);if(!fp1
13、)printf(can not open this file!n);exit(0);p=59;/最初令 p 为任意一个非零整数,p 由根顺着树枝一直到树叶ch=fgetc(fp1);fp2=fopen(jiema.txt,w);if(!fp2)文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 H
14、K8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6
15、F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 H
16、K8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6
17、F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 H
18、K8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6
19、F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2 printf(can not open this file!n);exit(0);while(ch!=EOF)fo
20、r(;HTp.lchild!=0|HTp.rchild!=0;)if(ch=0)p=HTp.lchild;else p=HTp.rchild;ch=fgetc(fp1);/下一个码字不断的取下一个 switch(p)case 27:printf(,);fprintf(fp2,);break;case 28:printf(.);fprintf(fp2,.);break;case 29:printf();fprintf(fp2,);break;case 30:printf(n);fprintf(fp2,n);break;default:printf(%c,p+96);文档编码:CL2K1H4M4E
21、7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M
22、9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E
23、7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M
24、9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E
25、7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M9B6F2文档编码:CL2K1H4M4E7 HK8L2D8N2T6 ZQ2F4M
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈夫曼树 编码 译码
限制150内