《 数据结构 》课程设计 ——赫夫曼编码/译码器设计 指导教师:李文书、周维达 班级:10 电信实验班 学号:Q ******** 姓名:*** 1 一、实验目的 1、提高分析问题、解决问题的能力,进一步巩固数据结构各种原理与方法。 2、熟悉掌握一门计算机语言,可以进行数据算法设计。 二、实验原理 哈夫曼编\译码器的主要功能是先建立哈夫曼树,然后利用建好的哈夫曼树生成哈夫曼编码后进行译码 。 在数据通信中,经常需要将传送的文字转换成由二进制字符0、1 组成的二进制串,称之为编码。构造一棵哈夫曼树,规定哈夫曼树中的左分之代表 0,右分支代表 1,则从根节点到每个叶子节点所经过的路径分支组成的 0 和 1 的序列便为该节点对应字符的编码,称之为哈夫曼编码。 最简单的二进制编码方式是等长编码。若采用不等长编码,让出现频率高的字符具有较短的编码,让出现频率低的字符具有较长的编码,这样可能缩短传送电文的总长度。哈夫曼树课用于构造使电文的编码总长最短的编码方案。 主要流程图如下: 开始 结点数是否大于1 将data 和权值赋给ht 输出根结点和权调用SELECT 函数 计算根结点函父结点为两子结点之和 输出两子结点和已构造的是否为根结点? 左子是否为空? 此时编码为0 I<2*N? I++ 编码为1 结束 否 否 否 右子是否为是 是 否 否 是 是 是 2 三、实验步骤 1:写好流程图,设计实验方案。 2:初始化,从终端读入字符集大小 n,以及 n 个字符和 n 个权值,建立哈夫曼树,并将它存于文件 HuofumanTree 中。 3:编码。利用已建好的哈夫曼树,对文件 ToBeTran 中的正文进行编码,然后将结果存入文件 CodeFile 中。 4:译码。利用已建好的哈夫曼树将文件 CodeFile 中的代码进行译码,结果存入文件 Textfile 中。 5:印代码文件(Print).将文件 CodeFile 以紧凑格式显示在终端上,每行 50 个代码。同时将此字符形式的编码文件写入文件 CodePrint 中。 6:印哈夫曼树(Treeprinting).将已在内存中的哈夫曼树以直观的方式(比如树)显示在终端上,同时将此字符形式的哈夫曼树写入文件 TreePrint 中。 具体函数如下: 1:Initialization() 初始化 2:Encoding() 编码 3:Decoding() 译码 4:Print_file() 打印代码文件 5:search(k,j,p) 搜索二叉树 6:Print_tree() 打印二叉树 7:menu() 主菜单 9:main() 主函数 四、实验结果与分析 (1 )大...