1、 姓名:姓名: 班级:班级:1212数字媒体技术二班数字媒体技术二班 学号:学号: 20201414 年年 0 06 6 月月 数据结构课程设计 实验报告书 1 赫夫曼编码赫夫曼编码/ /译码器译码器 一、一、 实验目的实验目的 1 进一步掌握最优二叉树的含义。 2 掌握最优二叉树的结构特征,以及各种存储结构的特点及使用范围。 3 熟练掌握哈夫曼树的建立和哈夫曼编码方法。 4 掌握用指针类型描述、访问和处理运算。 二、二、 实验内容实验内容 编写一个哈夫曼码的编编写一个哈夫曼码的编/译码系统译码系统,一个完整的系统应具有以下功能:一个完整的系统应具有以下功能: (1) 初始化。从终端读入字符集
2、大小 n,以及 n 个字符和 n 个权值,建立哈夫曼树,并 将它存于文件 hfmTree.txt 中。 (2) 编码。利用已建好的哈夫曼树,对文件 ToBeTra.txt 中的正文进行编码,然后将结 果存入文件 CodeFil.txt 中。 (3) 译码。 利用已建好的哈夫曼树将文件 CodeFile.txt 中的代码进行译码, 结果存入文 件 Textfile.txt 中。 (4) 打印哈夫曼树(Treeprinting).将已在内存中的哈夫曼树以直观的方式(比如树) 显示在终端上,同时将此字符形式的哈夫曼树写入文件 TreePrint.txt 中。 三、三、 实验步骤实验步骤 1. 定义结
3、点结构,定义哈夫曼树结构; 2. 初始化哈夫曼树,存储哈夫曼树信息; 3. 定义求哈夫曼编码的函数; 4. 定义译哈夫曼编码的函数; 5 写出主函数。 6 测试系统。 2 四、四、 实验内容实验内容 1. 文件 工程包含两个头文件,Huffman.h 用于定义显示选项菜单的相关函数,HuffmanTree.h 用于定义与霍夫曼编码相关的类;包含三个 cpp 文件,Huffman.cpp 用于实现显示选项 菜单的相关函数,HuffmanTree.cpp 用于实现与霍夫曼编码相关的类的成员函数等, HuffmanCode.cpp 用于主函数的实现。 2. 霍夫曼编码相关类 程序中将霍夫曼树结点与霍
4、夫曼编码相关操作分别封装为类 3 通过对类内部数据的赋值与相关函数的操作,可以完成霍夫曼编码解码等操作 3. 选项菜单等相关函数 4 Init()函数用于从外部文件中加载霍夫曼树, 因为树人工不好整理所以我设置了读入树的 叶子结点与权值,然后内部编写函数将这两种数据整理成霍夫曼树 5 ChooseCode()函数用于执行从终端读取编码串,然后根据读取的霍夫曼树来解码 ChooseRecode()函数用以执行解码操作,对从终端或者从文件读取的编码串进行解码并 输出 6 InputFromFile()函数用于从外部文件读取待解码的编码串 OutputToFile()函数可以将霍夫曼树,解码后的字符
5、串输出到外部文件中 7 4. 霍夫曼编码操作 编码首先从外部初始化霍夫曼树,即调用 Init()函数从外部读取数据; 8 然后选择编码串来源,可以从外部文件读取,也可从终端输入; 最后是进行霍夫曼解码,调用 HuffmanRecoding()函数; 9 五、五、 实验结果实验结果 首先在 C 盘下设置 HuffmanTree.txt 的初始值,第一行为叶子结点的值,第二行为权值 然后设置 code.txt 的初始值,为要解码的字符串 10 运行程序 第一步初始化 第二步从 code.txt 读取编码串 11 第三步,解码 第四步,输出到 HuffmanCode.txt 文件 12 还可以选择从终端输入编码串然后解码,输出到外部,比如编码串 000011010(lqt) 13 六、六、 实验心得实验心得 实验之后, 我对于程序设计的思路又有了加深的理解, 同时掌握了一定的霍夫曼编码方面的 知识。在实验中犯下的错误也显示出基础掌握不够牢固的劣根,以后我定当注意。