文档详情

C语言-哈夫曼编码实验报告.doc

发布:2019-04-17约7.69千字共11页下载文档
文本预览下载声明
PAGE PAGE 11 福 建 工 程 学 院 课程设计 课 程: 数据结构 题 目: 哈夫曼编码和译码 专 业: 信息管理信息系统 班 级: 1002班 座 号: 15号 姓 名: 林左权 2011年 6月 27日 一、要解决的问题 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。 二、算法基本思想描述: 根据给定的字符和其中每个字符的频度,构造哈夫馒树,并输出字符集中每个字符的哈夫曼编码.将给定的字符串根据其哈夫曼编码进行编码,并进行相应的译码. 三、设计 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 inputweight(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;in;i++) if(r[j]==t[i].key) hfmtpath(t,i,j); printf(\n); } (4)对用户输入的字符进行编码 void decoding(hfmt t)//对用户输入的密文进行译码 { char r[100]; int i,j,len; j=2*n-2;//j初始从树的根节点开始 printf(\n\n请输入需要译码的字符串:); gets(r); len=strlen(r); printf(译码的结果是:); for(i=0;ilen;i++) { if(r[i]==0) { j=t[j].lchild; if(t[j].lchild==-1) { printf(%c,t[j].key); j=2*n-2; } } else if(r[i]==1) { j=t[j].rchild; if(t[j].rchild==-1) { printf(%c,t[j].key); j=2*n-2; }
显示全部
相似文档