哈夫曼树课程设计 哈夫曼树的编码,译码.doc
文本预览下载声明
广东技术师范学院天河学院
算法与数据结构
课程设计报告
题 目: 哈夫曼编/译码器
设 计 者:
专业班级: 本网络101
学 号: 02
指导教师:
所属系部: 计算机科学与技术系
2012年 06月 3 日
目 录
1 问题描述及要求 1
2 需求分析 1
3 算法思想描述 1
4 概要设计 2
1.创建哈夫曼树及函数调用过程 2
2.输出哈夫曼数节点的权值的及调用过程 3
3.进行哈夫曼编码及调用过程 3
4.字符串-哈夫曼码及调用过程 4
5 详细设计 4
1.创建哈夫曼树 4
2.显示HT的终结状态 5
3.打印哈夫曼编码 5
4.打印哈夫曼树 5
5.字符串-哈夫曼编码 6
6.源程序清单 7
6 测试数据及分析 10
1.创建哈夫曼树 10
2.显示HT的终结状态 10
3.打印哈夫曼编码 10
4.打印哈夫曼树 11
5.字符串-哈夫曼编码 11
7课程设计总结 11
8 参考资料 12
哈夫曼编/译码器
1 问题描述及要求
利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。对于双工信道(即可以双向传输信息的信道),每端都需要一个完成的编\译码系统。试为这样的信息收发站写一个哈夫曼的编\译码系统。
设计要求:
1. 初始化。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树。
2. 编码。利用已建好的哈夫曼树,对正文进行编码。
3. 译码。对编码好的内容进行译码。
4. 打印编码。
5. 打印哈夫曼树
2 需求分析
(1)再通信过程中,为了提高信道利用率,缩短信息传输时间降,低传输成本 ,需要一编译码器。
(2)此哈夫曼编/译码器应具有编和译的双向功能,即在发送端通过编码系统对传入的数据进行编码,
在接受端将数据译码.将具有这两项功能的编译码器用于双工信道,就可满足 双工信道的双向编译功能.
(3) 输入某段报文时,系统将自动完成编译输出.
3 算法思想描述
1:初始化。从中端读入字符集大小n,以及n个字符和n各权值 ,建哈夫曼树,并存于hfmTree中
2:编码。利用已建好的树,对文件 ToBeTran中的正文进行编码,
然后将结果存入文件CodeFile .
3:译码。利用已建好的树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
4:印代码文件CodeFile。将文件以紧凑格式显示在终端上,每行50个代码 。
同时将此字符形式的编码文件写入文件CodePrin中。
5:印哈夫曼树。将已在内存中的树以直观的方式(树或凹入表形式)显示在终端,同时将此字符形式的哈夫曼树写入文件TreePrin中。
4 概要设计
本程序主要定义了4个函数: void CreateHT(HuffmanTree HT,int n);void preorderHT(HuffmanTree HT,int m);void GetHhffanCode(HuffmanTree HT,HuffmanCode HC,int n); void strHT(HuffmanTree HT,HuffmanCode HC,int n)
1.创建哈夫曼树及函数调用过程
函数:void CreateHT(HuffmanTree HT,int n)
功能:构造哈夫曼树
2.输出哈夫曼数节点的权值的及调用过程
函数:void preorderHT(HuffmanTree HT,int m)
功能:显示HT的终结状态
3.进行哈夫曼编码及调用过程
函数:void GetHhffanCode(HuffmanTree HT,HuffmanCode HC,int n)
功能:打印哈夫曼编码
4.字符串-哈夫曼码及调用过程
函数:void strHT(HuffmanTree HT,HuffmanCode HC,int n)
功能:输入一个字符串,显示该字符的哈夫曼编码
5 详细设计
1.创建哈夫曼树
void CreateHT(HuffmanTree HT,int n){//创建哈夫曼树
int i,k,Lnode,Rnode,Min1,Min2;
if(n=1)return;
HT=new HNode[2*n-1];
strread(ch);
printf(请输入字符的权值\n);
for(i=0;in;i++){//初始化HT
printf(%c = ,ch[i]);
scanf(%d,HT[i].weight);
HT[i].parent=-1;
HT[i].
显示全部