哈夫曼树的应用与实现.pdf
《哈夫曼树的应用与实现.pdf》由会员分享,可在线阅读,更多相关《哈夫曼树的应用与实现.pdf(6页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、/*哈夫曼树的应用和实现(1)根据输入的字符和相应的权值建立哈夫曼树,并输出已建的相应内容作为检查;(2)用哈夫曼树实现前缀编码,并输出各字符的编码串;(3)输入一组二进制报文,进行译码,并输出译文。*/#include#include#include#include#define N 1000/定义结点数最大值#define M 2*N-1#define maxval 10000.0/定义 float 的最大值typedefstruct/定义哈夫曼树类型 char data;float weight;intlchild,rchild,parent;hufmtree;hufmtree tree
2、M;typedefstruct/定义哈夫曼树编码类型 char bitsN;int start;char data;codetype;codetype codeN;void HUFFMAN(hufmtree t);void HUFFMANCODE(codetype code,hufmtree t);void HUFFMANDECODE(codetype code,hufmtree t);void OUTTREE(hufmtree t);static intn,m;/定义静态全局变量n 储存需要的结点数/m 为构建哈夫曼树后的总结点数/菜单的建立void main()int x,flag1=0;
3、printf(ttt哈夫曼树的应用和实现n);while(1)printf(n);printf(菜单:1 建立哈夫曼树2 哈夫曼树编码3 输入电文译码0 退出使用 n);printf(n);printf(请选择操作:n);scanf(%d,&x);switch(x)case 1:HUFFMAN(tree);break;case 2:HUFFMANCODE(code,tree);break;case 3:HUFFMANDECODE(code,tree);break;case 0:flag1=1;/输入号为0 时使 flag1=1 break;default:printf(输入的选择有误!请重新输
4、入!n);break;if(flag1)break;/表明选择了退出操作故跳出循环 printf(Thank You!n);/哈夫曼树的构建void HUFFMAN(hufmtree t)int i,j,p1,p2;charch;float small1,small2,f;printf(请输入叶子结点数:n);scanf(%d,&n);m=2*n-1;for(i=0;im;i+)/初始化哈夫曼树 文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O1
5、0 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S
6、4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L
7、9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A
8、10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7
9、A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码
10、:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3
11、D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5treei.parent=0;treei.lchild=0;treei.rchild=0;treei.data=0;treei.weight=0.0;for(i=0;in;i+)getchar();/getchar 吃掉回车printf(请输入第%d 个结点的字符和权重(空格隔开):n,i);scanf(%c%f,&ch,&f);/输入结点字符和权重treei.da
12、ta=ch;treei.weight=f;for(i=n;i=0;j-)/循环找出最小、次小权值和下标if(treej.parent=0)if(treej.weight-small1)0.0001)/float 精度,当两者之差小于0.0001 认为相等 small2=small1;/小于当前最小权值,更新最小权值和次小权值以及位置small1=treej.weight;p2=p1;p1=j;else if(treej.weight-small2)0.0001)/小于当前次小权值,更新次小权值和位置 small2=treej.weight;p2=j;treep1.parent=i;/修改最小、
13、次小结点的双亲为新生成的结点treep2.parent=i;treei.lchild=p1;/新结点的左右孩子指向最小次小值的结点treei.rchild=p2;treei.weight=treep1.weight+treep2.weight;/新生成结点权值为文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文
14、档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI
15、1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D
16、1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 H
17、Z9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3
18、G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 Z
19、H3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y
20、3Y7A5文档编码:CI1L3D7D1O10 HZ9S4T3G1L9 ZH3A10Y3Y7A5两小之和 OUTTREE(tree);/哈夫曼编码void HUFFMANCODE(codetype code,hufmtree t)inti,j,c,p;codetype cd;/定义缓冲变量for(i=0;in;i+)cd.start=n;c=i;/从叶子节点出发线上回溯p=treec.parent;/p 指向 c 的双亲结点cd.data=treec.data;while(p!=0)cd.start-;if(treep.lchild=c)/判断是否是左孩子,是编码为 0cd.bitscd.sta
21、rt=0;else/否则编码为1cd.bitscd.start=1;c=p;/更新 p 的双亲结点,进行下一次循环p=treec.parent;codei=cd;/把一个字符的编码赋给相应codei printf(输出每个字符的哈夫曼编码:n);/输出每个字符的哈弗曼编码for(i=0;in;i+)printf(%c:,codei.data);for(j=codei.start;jn;j+)printf(%c,codei.bitsj);printf(n);/哈夫曼译码void HUFFMANDECODE(codetype code,hufmtree t)文档编码:CI1L3D7D1O10 HZ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 哈夫曼树 应用 实现
限制150内