推荐课程设计报告哈夫曼编码.doc

上传人:b****1 文档编号:183057 上传时间:2022-10-05 格式:DOC 页数:22 大小:238.50KB
下载 相关 举报
推荐课程设计报告哈夫曼编码.doc_第1页
第1页 / 共22页
推荐课程设计报告哈夫曼编码.doc_第2页
第2页 / 共22页
推荐课程设计报告哈夫曼编码.doc_第3页
第3页 / 共22页
推荐课程设计报告哈夫曼编码.doc_第4页
第4页 / 共22页
推荐课程设计报告哈夫曼编码.doc_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

推荐课程设计报告哈夫曼编码.doc

《推荐课程设计报告哈夫曼编码.doc》由会员分享,可在线阅读,更多相关《推荐课程设计报告哈夫曼编码.doc(22页珍藏版)》请在冰豆网上搜索。

推荐课程设计报告哈夫曼编码.doc

如果您需要使用本文档,请点击下载按钮下载!

学号:

课程设计

题目

哈夫曼编码

学院

计算机科学与技术

专业

计算机科学与技术

班级

姓名

指导教师

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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1