计算机科学与技术学院数据结构实验报告班级2014级计算机1班学号20144138021姓名张建华成绩实验项目简单哈夫曼编/译码的设计与实现实验日期2016
5一、实验目的本实验的目的是进一步理解哈夫曼树的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力
二、实验问题描述利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本
但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码,此实验即设计这样的一个简单编/码系统
系统应该具有如下的几个功能:1、接收原始数据
从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmtree
利用已建好的哈夫曼树(如不在内存,则从文件hfmtree
dat中读入),对文件中的正文进行编码,然后将结果存入文件codefile
利用已建好的哈夫曼树将文件codefile
dat中的代码进行译码,结果存入文件textfile
4、打印编码规则
即字符与编码的一一对应关系
5、打印哈夫曼树,将已在内存中的哈夫曼树以直观的方式显示在终端上
三、实验步骤1、实验问题分析1、构造哈夫曼树时使用静态链表作为哈夫曼树的存储
在构造哈夫曼树时,设计一个结构体数组HuffNode保存哈夫曼树中各结点的信息,根据二叉树的性质可知,具有n个叶子结点的哈夫曼树共有2n-1个结点,所以数组HuffNode的大小设置为2n-1,描述结点的数据类型为:Typedefstrcut{Intweight;/*结点权值*/Intparent;Intlchild;Intrchild;}HNodeType;2、求哈夫曼编码时使用一维结构数组HuffCode作为哈夫曼编码信息的存储
求哈夫曼编码,实质上就是在已建立的哈夫曼树中,从叶子结点开始