欢迎来到天天文库
浏览记录
ID:31264214
大小:125.98 KB
页数:21页
时间:2019-01-07
《哈弗曼树实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、一、问题描述用哈夫曼编码设计一•个压缩软件,能对输入的任何类型的文件进行哈夫曼编码,产牛编码后的文件——压缩文件;也能对输入的压缩文件进行译码,生成压缩前的文件一解压文件。二、基本要求耍求编码/译码效率尽可能高。三、工具/准备工作在开始做课程设计项目前,应回顾或复习的相关内容。需要一台主算机,其中安装有Visual0+6.0、VisualO+2005、VisualO+2005Express.Dev-O-+或MinGWDeveloperStudio等集成开发环境软件。四、分析与实现在Huffman树中,叶结点应包含字符及对应权值,而
2、内部结点应含权及指向孩了的指针,因此最好采界结数据结构方式來表示结点,为此首先声明哈夫曼树结点的抽彖基类模板:〃哈決曼树结点的抽彖基类模板templateclassMyHuffNode{public://哈夫曼树结点的方法://返回结点的权值//判断结点是否为叶结点〃返冋结点的左孩子//返回结点的右孩子virtualWeightTypeWeight()=0;virtualboollsLeaf()=0;virtualMyHuffNode*Left()=0;virtualMyHuffNode*Right()=0;//设置结点的左孩子/
3、/设置结点的右孩子};对于叶结点,数据成员包含字符包权值,具体声明如2//哈夫曼树叶结点派生类模板templateclassMyLeafNode:publicMyHuffNodeprivate://哈夫曼树叶结点派工类的数据成员:CharTypecha;//叶结点包含的字符WeightTypeweight;//权值public://哈夫曼树叶结点方法声明及重载编译系统默认方法声明://构造函数模板MyLeafNode(constCharType&ch,constWeightType&w);//析构函数模板virtual~MyLea
4、fNode(){}CharTypeChar();//返冋叶结点的字符WeightTypeWeight();//返回结点的权值boollsLeaf();//判断结点是否为叶结点MyHuffNode*Right();//返冋结点的右孩子voidSetLeft(MyHuffNode*child){}//设置结点的左孩子voidSetRight(MyHuffNode*child){}//设置结点的右孩子};对于内部结点,应包含指向孩了的指向与权值数据成员,具体声明如下://哈夫曼树内部结点派生类模板templateclassMylntIN
5、ode:publicMyHuffNode{private://哈夫曼树叶结点派生类的数据成员:MyHuffNode*IChild;//左孩子MyHuffNode*rChild;//右孩子WeightTypeweight;//权值public://哈夫曼树内部结点方法声明及遁载编译系统默认方法声明:MylntlNode(constWeightType&w,//构造函数//析构函数模板virtual~MylntlNode(){}WeightTypeWeight();boollsLeaf();MyHuffNode*Left();//返冋
6、结点的左孩子MyHuffNode*Right();//返回结点的右孩子voidSetLeft(MyHuffNode*child);//设置结点的左孩子voidSetRight(MyHuffNode*child);//设置结点的右孩子};//返冋结点的权值//判断结点是否为叶结点对于哈夫曼树类模板,具体声明如下://哈夫曼树类模板templateclassMyHuffmanTreeprotected://哈夫曼树的数据成员:MyHuffNode*root;String*charCodes;MyHuffNode*pCurNode;in
7、tnum;//根//字符编码信息〃译码时从根结点到叶结点路径的为前结点//叶结点个数unsignedint(*Charindex)(constCharType&);〃字符位置映射//辅助函数模板://生成字符编码voidOear(MyHuffNode*r);//释放以r为根的树所占用空间public://哈夫曼树方法声明及重载编译系统默认方法声明:MyHuffmanTree(CharTypech[],WeightTypew[],intn,unsignedint(*Chlndex)(constCharType&));//由字符,权值
8、,字符个数及字符位宣映射构造哈夫曼树virtual~MyHuffmanTree();//析构函数模板StringEncode(CharTypech);//编码LinkListDecode(StringstrCode);//译码};将各字符的编码存储
此文档下载收益归作者所有