《哈夫曼树解压与压缩.pdf》由会员分享,可在线阅读,更多相关《哈夫曼树解压与压缩.pdf(13页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、哈夫曼树解压与压缩哈夫曼树的压缩与解压1.算法简要描述1、哈夫曼算法1.哈弗曼算法就是根据给定的n 个权值 w1,w2,w3、wn,构造由 n 棵二叉树构成的深林F=T1,T2,。Tn,其中每个二叉树 Ti 分别都就是只含有一个权值 wi 的根结点,其左右子树为空(i=1,2)。2.在深林 F 中选取其根结点的权值最小的两棵二叉树,分别作其左右子树构造一颗新的二叉树,并置这棵新的二叉树根结点的权值为其左右子树的根结点之与。3.从 F 中删去这两棵二叉树,同时刚新生成的二叉树加入到深林F 中。4.重复 2,3,步骤,直至深林 F 中只含有一颗二叉树为止。2、哈夫曼树的实现函数 String En
2、Code(Char Type ch):表示哈夫曼树已存在,返回字符 ch的编码。函数 LinkListUnCode(String strCode):表示对哈夫曼树进行译码,返回编码前的字符序列。根据算法可以瞧出,在具有 n 个结点权值的哈夫曼树的构造过程中,每次都就是从 F 中删去两棵树,增加一棵树,即每次结束后减少一棵树,经过 n-1 次处理后,F 中就只剩下一棵树了。另外,每次合并都要产生一个新的结点,合并 n-1次后共产生了 n-1个新结点,并且这 n-1个新节点都就是具有左右子树的分支结点。则最终得到的哈夫曼树中共有2n-1 个结点,并且其中没有度为1 的分支结点,最后一次产生的新结点
3、就就是哈夫曼树的根结点。源 代 码 中 创 建 了 一 个 哈 夫 曼 树 结 点 类,其 中 有 数 据 成 员weight,parent,leftChild,rightChild 分别代表了权值,双亲,左孩子,右孩子。在哈夫曼树类中有数据成员*nodes,*LeafChars,*LeafCharCodes,curPos,num,分别用来存储结点信息,叶结点字符信息,叶结点字符编码信息,译码时从根结点到叶结点路径的当前结点,叶结点个数。哈夫曼树类中含有多个函数,有构造函数,析构函数等。由函数HuffmanTree(CharType ch,WeightType w,int n)来构造由字符,权
4、值,与字符个数构造哈夫曼树,在根据哈夫曼算法很容易实现哈夫曼类的函数以及构造函数。在在算法中,求叶结点字符的编码时,需要从叶结点出发走一条从高叶结点到根结点的路径,而编码却就是从根结点出发到叶结点的路径,由左分支为编码 0,右分支为编码1,得到的编码,因此从叶结点出发到根结点的路径得到的编码就是实际编码的逆序,并且编码长度不确定,又由于可以再线性链表中构造串,因此将编码的信息储存在一个线性立案标准,每得到一位编码都将其插入在线性链表的最前面。在求某个字符的编码就是由函数EnCode(CharType ch)来求,返回字符编码。在进行译码时,用一个线性链表存储字符序列,由函数 Decode(St
5、ring strCode)来求,对编码串strCode进行译码,返回编码前的字符序列。函数Compress()用哈夫曼编码压缩文件。函数 Decompress()解压缩用哈夫曼编码压缩的文件。在主函数中有两个选项,一个就是选择编码压缩,一个就是解压。在函数中使用了文件输入输出流,我们可以选择要压缩的文件名输入,在选出压缩文件保存的地方与文件类型,将压缩所得到的文件存储在另一个文件中,解压也就是如此。哈夫曼树解压与压缩2.源代码#ifndef _HUFFMAN_TREE_NODE_H_#define _HUFFMAN_TREE_NODE_H_/哈夫曼树结点类模板template struct H
6、uffmanTreeNode WeightType weight;/权数据域unsignedint parent,leftChild,rightChild;/双亲,左右孩子域HuffmanTreeNode();/无参数的构造函数模板HuffmanTreeNode(WeightType w,int p=0,int lChild=0,int rChild=0);/已知权,双亲及左右孩子构造结构;/哈夫曼树结点类模板的实现部分template HuffmanTreeNode:HuffmanTreeNode()/操作结果:构造空结点 parent=leftChild=rightChild=0;temp
7、late HuffmanTreeNode:HuffmanTreeNode(WeightType w,int p,int lChild,int rChild)/操作结果:构造一个权为 w,双亲为 p,左孩子为 lChild,右孩子为 rChild 的结点 weight=w;/权parent=p;/双亲leftChild=lChild;/左孩子rightChild=rChild;/右孩子#endif#ifndef _HUFFMAN_TREE_H_#define _HUFFMAN_TREE_H_#includestring、h/串类#includehuffman_tree_node、h/哈夫曼树结点
8、类模板/哈夫曼树类模板template class HuffmanTree protected:HuffmanTreeNode*nodes;/存储结点信息,nodes0未用CharType*LeafChars;/叶结点字符信息,LeafChars0未用String*LeafCharCodes;/叶结点字符编码信息,LeafCharCodes0未用int curPos;/译码时从根结点到叶结点路径的当前结点int num;/叶结点个数文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7
9、O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码
10、:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8
11、H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J
12、6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E
13、2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10
14、B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2
15、I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1哈夫曼树解压与压缩/辅助函数模板:void Select(int cur,int&r1,int&r2);/nodes1 cur中选择双亲为,权值最小的两个结点 r1,r2 void CreatHuffmanTree(CharType ch,WeightType w,int n);/由字符,权值与字符个数构造哈夫曼树public:/
16、哈夫曼树方法声明及重载编译系统默认方法声明:HuffmanTree(CharType ch,WeightType w,int n);/由字符,权值与字符个数构造哈夫曼树virtual HuffmanTree();/析构函数模板String Encode(CharType ch);/编码LinkList Decode(String strCode);/译码HuffmanTree(const HuffmanTree©);/复制构造函数模板HuffmanTree&operator=(const HuffmanTree©);/重载赋值运算符;/孩子兄弟表示哈夫曼树类模板的实现部分tem
17、plate void HuffmanTree:Select(int cur,int&r1,int&r2)/操作结果:nodes1 cur中选择双亲为,权值最小的两个结点r1,r2 r1=r2=0;/0 表示空结点for (int pos=1;pos=cur;pos+)/查找树值最小的两个结点if (nodespos、parent!=0)continue;/只处理双亲不为的结点if (r1=0)r1=pos;/r1为空,将pos赋值给 r1 elseif (r2=0)r2=pos;/r2为空,将pos赋值给 r2 elseif(nodespos、weight nodesr1、weight)r1=
18、pos;/nodespos权值比 nodesr1更小,将pos赋为 r1 elseif (nodespos、weight nodesr2、weight)r2=pos;/nodespos权值比 nodesr2更小,将pos赋为 r2 template void HuffmanTree:CreatHuffmanTree(CharType ch,WeightType w,int n)文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M
19、10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 Z
20、M2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9
21、P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档
22、编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6
23、U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S1
24、0J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM
25、6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1哈夫曼树解压与压缩/操作结果:由字符,权值与字符个数构造哈夫曼树 num=n;/叶结点个数int m=2*n-1;/结点个数nodes=new HuffmanTreeNodem+1;/nodes0未用LeafChars=new CharTypen+1;/LeafChars0未用LeafCharCodes=new Stringn+1;/LeafCharCodes0未用int pos;/临
26、时变量for (pos=1;pos=n;pos+)/存储叶结点信息nodespos、weight=wpos-1;/权值LeafCharspos=chpos-1;/字符 for (pos=n+1;pos=m;pos+)/建立哈夫曼树int r1,r2;Select(pos-1,r1,r2);/nodes1 pos-1 中选择双亲为,权值最小的两个结点r1,r2/合并以 r1,r2 为根的树nodesr1、parent=nodesr2、parent=pos;/r1,r2双亲为 pos nodespos、leftChild=r1;/r1为pos的左孩子nodespos、rightChild=r2;/
27、r2为pos的右孩子nodespos、weight=nodesr1、weight+nodesr2、weight;/pos 的权为 r1,r2 的权值之与 for (pos=1;pos=n;pos+)/求n个叶结点字符的编码LinkList charCode;/暂存叶结点字符编码信息for (unsignedint child=pos,parent=nodeschild、parent;parent!=0;child=parent,parent=nodeschild、parent)/从叶结点到根结点逆向求编码if (nodesparent、leftChild=child)charCode、Inse
28、rt(1,0);/左分支编码为0 else charCode、Insert(1,1);/右分支编码为 1 LeafCharCodespos=charCode;/charCode中存储字符编码 curPos=m;/译码时从根结点开始,m为根 template HuffmanTree:HuffmanTree(CharType ch,WeightType w,int n)/操作结果:由字符,权值与字符个数构造哈夫曼树 CreatHuffmanTree(ch,w,n);/由字符,权值与字符个数构造哈夫曼树 文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:C
29、S6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5
30、S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6
31、HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X
32、2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1
33、 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5
34、P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1
35、文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1哈夫曼树解压与压缩template HuffmanTree:HuffmanTree()/操作结果:销毁哈夫曼树 if (nodes!=NULL)delete nodes;/释放结点信息if (LeafChars!=NULL)delete LeafChars;/释放
36、叶结点字符信息if (LeafCharCodes!=NULL)delete LeafCharCodes;/释放叶结点字符编码信息 template String HuffmanTree:Encode(CharType ch)/操作结果:返回字符编码 for (int pos=1;pos=num;pos+)/查找字符的位置if (LeafCharspos=ch)return LeafCharCodespos;/找到字符,得到编码 throw Error(非法字符,无法编码!);/抛出异常 template LinkList HuffmanTree:Decode(String strCode)/操
37、作结果:对编码串 strCode 进行译码,返回编码前的字符序列 LinkList charList;/编码前的字符序列for (int pos=0;pos strCode、Length();pos+)/处理每位编码if (strCodepos=0)curPos=nodescurPos、leftChild;/0表示左分支else curPos=nodescurPos、rightChild;/1表示左分支if (nodescurPos、leftChild=0&nodescurPos、rightChild=0)/译码时从根结点到叶结点路径的当前结点为叶结点charList、Insert(charL
38、ist、Length()+1,LeafCharscurPos);curPos=2*num-1;/curPos回归根结点 return charList;/返回编码前的字符序列 template HuffmanTree:HuffmanTree(const HuffmanTree©)/操作结果:由哈夫曼树 copy构造新哈夫曼树复制构造函数模板 num=copy、num;/叶结点个数curPos=copy、curPos;/译码时从根结点到叶结点路径的当前结点int m=2*num-1;/结点总数nodes=new HuffmanTreeNodem+1;/nodes0未用文档编码:CS6U8
39、H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J
40、6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E
41、2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10
42、B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2
43、I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7
44、O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码
45、:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1哈夫曼树解压与压缩LeafChars=new CharTypenum+1;/LeafChars0未用LeafCharCodes=new Stringnum+1;/LeafCharCodes
46、0未用int pos;/临时变量for (pos=1;pos=m;pos+)/复制结点信息nodespos=copy、nodespos;/结点信息 for (pos=1;pos=num;pos+)/复制叶结点字符信息与叶结点字符编码信息LeafCharspos=copy、LeafCharspos;/叶结点字符信息LeafCharCodespos=copy、LeafCharCodespos;/叶结点字符编码信息 template HuffmanTree&HuffmanTree:operator=(constHuffmanTree©)/操作结果:将哈夫曼树 copy赋值给当前哈夫曼树重载赋
47、值运算符 if (©!=this)if (nodes!=NULL)delete nodes;/释放结点信息if (LeafChars!=NULL)delete LeafChars;/释放叶结点字符信息if (LeafCharCodes!=NULL)delete LeafCharCodes;/释放叶结点字符编码信息num=copy、num;/叶结点个数curPos=copy、curPos;/译码时从根结点到叶结点路径的当前结点int m=2*num-1;/结点总数nodes=new HuffmanTreeNodem+1;/nodes0未用LeafChars=new CharTypenum
48、+1;/LeafChars0未用LeafCharCodes=new Stringnum+1;/LeafCharCodes0未用int pos;/临时变量for (pos=1;pos=m;pos+)/复制结点信息nodespos=copy、nodespos;/结点信息 for (pos=1;pos=num;pos+)/复制叶结点字符信息与叶结点字符编码信息LeafCharspos=copy、LeafCharspos;/叶结点字符信息LeafCharCodespos=copy、LeafCharCodespos;/叶结点字符编码信息 return *this;#endif#ifndef _HUFFM
49、AN_COMPRESS_H_ 文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM
50、2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P7O1文档编码:CS6U8H5S10J6 HM6E2X2M10B1 ZM2I5P9P