推荐课程设计报告哈夫曼编码Word格式文档下载.doc
《推荐课程设计报告哈夫曼编码Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《推荐课程设计报告哈夫曼编码Word格式文档下载.doc(22页珍藏版)》请在冰豆网上搜索。
学生姓名:
拉巴珠久专业班级:
计算机0806
指导教师:
姚寒冰工作单位:
计算机科学系
题目:
哈夫曼编码
初始条件:
输入一段英文字符,试为该文中的每个字符编制相应的哈夫曼码。
(1)I:
初始化(Initialization)。
对输入的一段英文中的每个字符统计其权值,建立哈夫曼树;
(2)E:
编码(Encoding)。
利用已建好的哈夫曼树,对每个字符进行编码。
(3)D:
译码(Decoding)。
利用已建好的每个编码,对输入的一个由0、1组成的序列进行译码;
(4)P:
印代码文件(Print)。
将每个字符编的哈夫曼码和译码结果显示在终端上。
测试用例见题集p149。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:
1、问题描述
简述题目要解决的问题是什么。
2、设计
存储结构设计、主要算法设计(用类C语言或用框图描述)、测试用例设计;
3、调试报告
调试过程中遇到的问题是如何解决的;
对设计和编码的讨论和分析。
4、经验和体会(包括对算法改进的设想)
5、附源程序清单和运行结果。
源程序要加注释。
如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出,
6、设计报告、程序不得相互抄袭和拷贝;
若有雷同,则所有雷同者成绩均为0分。
时间安排:
1、第18周(6月28日至7月2日)完成。
2、7月2日08:
30到计算中心检查程序、交课程设计报告、源程序(CD盘)。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
1设计题目 1
2问题描述 1
3.1数据结构设计 1
3.2主要算法设计 3
3.3测试用例设计 6
4调试报告 7
5结束语 7
六、课程设计参考资料 8
附录 9
F1源代码 9
F2运行结果 16
1设计题目
哈夫曼编码
2问题描述
输入一段英文字符,试为该文中的每个字符编制相应的哈夫曼码。
3.设计
3.1数据结构设计
抽象数据类型二叉树的定义如下:
ADTBinaryTree{
数据对象D:
D是具有相同特性的数据元素的集合。
数据关系R:
基本操作P:
InitBiTree(&
T);
操作结果:
构造空二叉树T。
DestroyBiTree(&
二叉树T存在。
销毁二叉树T。
CreateBiTree(&
T,definition);
definition给出二叉树T的定义。
按definition构造二叉树T。
ClearBiTree(&
将二叉树T清为空树。
BiTreeEmpty(T);
若T为空二叉树。
则返回TRUE,否则FALSE。
BiTreeDepth(T);
返回T的深度。
Root(T);
返回T的根。
Value(T,e);
二叉树T的存在,e是T中某个结点。
返回e的值。
Assign(T,&
e,value);
二叉树T存在,e是T中某个结点。
结点e赋值为value。
Parent(T,e);
二叉树T存在,e是T中某个结点。
若e是T的非根结点,则返回它的双亲,否则返回“空”。
DeleteChild(T,p,LR);
二叉树T存在,p指向T中某个结点,LR为0或1。
根据LR为0或1,删除T中p所指结点的左或右子树。
InsertChild(T,p,LR,c);
二叉树的T存在,p指向T中某个结点,LR为0或1,非空二叉树c与T不相交且右子树为空。
根据LR为0或1,插入c为T中p所指结点的左或右子树。
P所指结点的原有左或右子树则成为c的右子树。
}
3.2主要算法设计
程序中一共定义了一个结构体和三个函数如下:
structHuffman//定义指向结点的结构体
{
intweight;
//权值
intparent,lchild,rchild;
//父亲结点和左右结点的位置
};
voidselect(Huffman*ht,inti,int&
s1,int&
s2)
{//选择权值较小的两个作为新的叶子结点,用于huffman的构造。
intj,k;
k=s1;
for(j=0;
j<
i+1;
j++)
if(s1!
=j&
&
j!
=s2&
ht[j].parent==0)
{
s1=j;
break;
}
for(j=0;
if(s2!
s1!
=k&
s2=j;
for(j=1;
=i;
if(ht[j].weight<
ht[s1].weight&
ht[j].parent==0)s1=j;
if(s1==s2)
for(j=0;
if(s2!
{
}
ht[s2].weight&
ht[j].parent==0&
=s1)s2=j;
voidHuffmancoding(Huffman*ht,char**&
hc,intk)
{//对haffman进行编码
intm,s1=0,s2=0,start,c,i,f,j;
char*cd;
m=2*k-1;
for(i=k;
i<
m;
i++)//构建huffman树
{
select(ht,i-1,s1,s2);
//调用select函数
ht[s1].parent=i;
ht[s2].parent=i;
ht[i].lchild=s1;