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 个权值,建立哈夫曼树。 并显示出每个字符的编码。 1.void inithfmt(hfmt t)//对结构体进行初始化 2.void inputw eight(hfmt t)//输入函数 3.void selectmin(hfmt t,int i,int *p1,int *p2)//选中两个权值最小的函数 4.void creathfmt(hfmt t)//创建哈夫曼树的函数 5.void phfmnode(hfmt t)//对字符进行初始编码 (3)对用户输入的字符进行编码 void encoding(hfmt t)//对用户输入的电文进行编码 { char r[1000];//用来存储输入的字符串 int i,j; printf("\n\n 请输入需要编码的字符:"); gets(r); printf("编码结果为:"); for(j=0;r[j]!='\0';j++) for(i=0;i