推荐课程设计报告哈夫曼编码.doc
- 文档编号:183057
- 上传时间:2022-10-05
- 格式:DOC
- 页数:22
- 大小:238.50KB
推荐课程设计报告哈夫曼编码.doc
《推荐课程设计报告哈夫曼编码.doc》由会员分享,可在线阅读,更多相关《推荐课程设计报告哈夫曼编码.doc(22页珍藏版)》请在冰豆网上搜索。
如果您需要使用本文档,请点击下载按钮下载!
学号:
课程设计
题目
哈夫曼编码
学院
计算机科学与技术
专业
计算机科学与技术
班级
姓名
指导教师
2010
年
07
月
02
日
如果您需要使用本文档,请点击下载按钮下载!
课程设计任务书
学生姓名:
拉巴珠久专业班级:
计算机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问题描述
输入一段英文字符,试为该文中的每个字符编制相应的哈夫曼码。
(1)I:
初始化(Initialization)。
对输入的一段英文中的每个字符统计其权值,建立哈夫曼树;
(2)E:
编码(Encoding)。
利用已建好的哈夫曼树,对每个字符进行编码。
(3)D:
译码(Decoding)。
利用已建好的每个编码,对输入的一个由0、1组成的序列进行译码;
(4)P:
印代码文件(Print)。
将每个字符编的哈夫曼码和译码结果显示在终端上。
3.设计
3.1数据结构设计
抽象数据类型二叉树的定义如下:
ADTBinaryTree{
数据对象D:
D是具有相同特性的数据元素的集合。
数据关系R:
基本操作P:
InitBiTree(&T);
操作结果:
构造空二叉树T。
DestroyBiTree(&T);
初始条件:
二叉树T存在。
操作结果:
销毁二叉树T。
CreateBiTree(&T,definition);
如果您需要使用本文档,请点击下载按钮下载!
初始条件:
definition给出二叉树T的定义。
操作结果:
按definition构造二叉树T。
ClearBiTree(&T);
初始条件:
二叉树T存在。
操作结果:
将二叉树T清为空树。
BiTreeEmpty(T);
初始条件:
二叉树T存在。
操作结果:
若T为空二叉树。
则返回TRUE,否则FALSE。
BiTreeDepth(T);
初始条件:
二叉树T存在。
操作结果:
返回T的深度。
Root(T);
初始条件:
二叉树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
if(s1!
=j&&j!
=s2&&ht[j].parent==0)
{
s1=j;break;
}
for(j=0;j
if(s2!
=j&&s1!
=j&&j!
=k&&ht[j].parent==0)
{
s2=j;break;
}
for(j=1;j<=i;j++)
if(ht[j].weight if(s1==s2) { 如果您需要使用本文档,请点击下载按钮下载! for(j=0;j if(s2! =j&&s1! =j&&j! =k&&ht[j].parent==0) { s2=j;break; } } for(j=0;j<=i;j++) if(ht[j].weight =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 { select(ht,i-1,s1,s2);//调用select函数 ht[s1].parent=i; ht[s2].parent=i; ht[i].lchild=s1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 推荐 课程设计 报告 哈夫曼 编码