1 福 建 工 程 学 院 课程设计 课 程: 数据结构 题 目: 哈夫曼编码和译码 专 业: 信息管理信息系统 班 级: 1 0 0 2 班 座 号: 1 5 号 * 名: *** 2 0 1 1 年 6 月 2 7 日 2 实验题目:哈夫曼编码和译码 一、要解决的问题 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本
但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)
对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统
二、算法基本思想描述: 根据给定的字符和其中每个字符的频度,构造哈夫馒树,并输出字符集中每个字符的哈夫曼编码
将给定的字符串根据其哈夫曼编码进行编码,并进行相应的译码
三、设计 1
数据结构的设计 (1)哈夫曼树的表示 设计哈夫曼树的结构体(htnode),其中包含权重、左右孩子、父母和要编码的字符
用这个结构体(htnode)定义个哈夫曼数组(hfmt[])
迷宫定义如下: typedef struct { int weight; int lchild; int rchild; int parent; char key; }htnode; typedef htnode hfmt[MAXLEN]; (2)对原始字符进行编码 初始化哈夫曼树(inithfmt)
从终端读入字符集大小 n,以及 n 个字符和n 个权值,建立哈夫曼树
并显示出每个字符的编码
void inithfmt(hfmt t)//对结构体进行初始化 2
void inputw eight(hfmt t)//输入函数 3
void selectmin(hfmt t,int i,int *p1,int *p2)//选中两个权值最小的函数 4
void creathfmt(hfm