1、四、详细设计 1、建立哈夫曼的结构体数据类型:typedef struct int weight; int parent; int lchild; int rchild;HNode;HNode HuffNodeMAXNODE+1;/*定义哈夫曼结构数组*/typedef struct int bitMAXBIT; int start;HCode;HCode HuffCodeMAXLEAF;/*定义编码结构*/2、构造哈夫曼树的算法:void Huffman() /*哈夫曼树的构造及编码函数*/ int i,j,m1,m2,x1,x2,n,c,p; HCode cd; coutn; Count=
2、n; for(i=0;i2*n-1;i+) /*数组HuffNode初始化*/ HuffNodei.weight=0; HuffNodei.parent=-1; HuffNodei.lchild=-1; HuffNodei.rchild=-1; 请输入叶结点的权值:endl;i+) /*输入n个叶结点的权值*/ cout请输入第i+1HuffNodei.weight;n-1;i+) /*哈夫曼树的构造*/ m1=MAXVALUE; m2=MAXVALUE; x1=x2=0; for(j=0;jn+i;j+) /*找出两棵权值最小的子树*/ if(HuffNodej.weightm1&HuffN
3、odej.parent=-1) m2=m1; x2=x1; m1=HuffNodej.weight; x1=j; else if(HuffNodej.weightm2& m2=HuffNodej.weight; x2=j; /*将找出的两棵子树合并为一棵子树*/ HuffNodex1.parent=n+i; HuffNodex2.parent=n+i; HuffNoden+i.weight=HuffNodex1.weight+HuffNodex2.weight; HuffNoden+i.lchild=x1; HuffNoden+i.rchild=x2;3、哈夫曼编码的算法:Count;i+)
4、/*求每个叶结点的哈夫曼编码*/ cd.start=Count-1; c=i; p=HuffNodec.parent; while(p!=-1) /*由叶结点向上直到树根*/ if(HuffNodep.lchild=c) cd.bitcd.start=0; else cd.bitcd.start=1; cd.start-; c=p; p=HuffNodec.parent; for(j=cd.start+1;j+) /*保存求出的每个叶子结点的哈夫曼编码和编码的起始位*/ HuffCodei.bitj=cd.bitj; HuffCodei.start=cd.start; 3、源程序代码:#inc
5、ludeiomanip.h#define MAXVALUE 1000; /*定义最大权值*/#define MAXLEAF 30 /*定义哈夫曼树中叶结点个数*/#define MAXNODE MAXLEAF*2-1 /*结点总数*/#define MAXBIT 10 /*定义哈夫曼编码的最大长度*/int Count; for(i=0;哈夫曼编码为:i+)/*输出每个叶结点的哈夫曼编码*/ for(j=HuffCodei.start+1;j+) coutHuffCodei.bitj;void HuffmanTreeshow()/*显示哈夫曼树*/int i;coutnumsetw(10)we
6、ightparentlchildrchild2*Count-1;i+)HuffNodei.weightHuffNodei.parentHuffNodei.lchildHuffNodei.rchildvoid main() Huffman();哈夫曼树双亲孩子表示:n HuffmanTreeshow();5、测试运行 (1).测试数据如下: 7,12,23,3,19,31 (2).输出结果应为:哈夫曼编码:0101 011 10 0100 00 11哈夫曼树的表示:num weight parent lchild rchild0 7 6 -1 -11 12 7 -1 -12 23 9 -1 -13 3 6 -1 -14 19 8 -1 -15 31 9 -1 -16 10 7 3 07 22 8 6 18 41 10 4 79 54 10 2 510 95 -1 8 9(3).程序运行结果如下:6、心得总结 通过本次实验,让我对一个程序的数据结构有了更全面更进一步的认识。在编写这个程序的过程中,我复习了之前学的一些基本语法,进一步学习了构造哈夫曼树的算法以及实现哈夫曼树编码的算法。体会了学以致用、突出自己劳动成果的喜悦心情,也从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1