赫夫曼编码(2)

2019-02-17 15:38

和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想; ? 总结:

总结可以包括 : 设计过程的收获、遇到问题及解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在设计过程中对《数据结构》课程的认识等内容。 5. 考核成绩评定标准:

本课程设计的评价由三部分组成,包括程序演示(50%),课程设计报告(30%),回答教师提问(20%)。

1.程序演示:

? 优 功能完善,全部测试正确,并且能够对局部进行完善。 ? 良 功能完善,但测试欠缺。 ? 中 功能基本完善,但程序尚有部分错误。

? 及格 完成内存中赫夫曼编码/译码,但不涉及文件操作。 ? 不及格 功能不完善,且程序错误较多,无法运行。

2.课程设计报告:

? 优 包括设计内容,设计思想,已经完成的任务及达到的目标,设计思路清晰、书写条理清楚,源程序结构合理、清晰,注释说明完整,有对本次课程设计的心得体会。 ? 良 包括设计内容,设计思想,已经完成的任务及达到的目标,设计思路基本清晰、书写条理基本清楚,源程序结构合理、清晰,注释说明基本完整,有对本次课程设计的心得体会。 ? 中 课程设计报告内容基本完整,思路较清晰,书写基本清楚,源程序结构尚可,有注释说明但不完整。

? 及格 课程设计报告内容基本完整,思路较差,书写尚清楚。 ? 不及格 课程设计报告内容不完整,书写没有条理。

3.回答教师提问:

? 优 能回答教师提出的所有问题,并完全正确,思路清晰 ? 良 基本能回答教师提出的所有问题,有些小错误 ? 中 基本能回答教师提出的问题,少数问题回答错误或不清楚

? 及格 能回答教师提出的问题,但较多问题回答错误或不能回答

? 不及格 基本不能回答教师提出的问题

四、 概要设计

1) 问题分析哈夫曼树的定义

1.哈夫曼树节点的数据类型定义为:

typedef struct{ //赫夫曼树的结构体 char ch;

double weight; //权值 int parent; int lchild; int rchild; }hnode,*hfmtree;

typedef hnode huffman[maxleaf*2-1]; huffman h; //定义一个结构数组

2)所实现的功能函数如下 1. void Initialization()

初始化哈夫曼树,利用顺序存储结构,按照哈夫曼规则建立2叉树。因为声明定义了全局结构数组存储哈夫曼树,故函数不需传参。从终端读入字符集大小n,以及n个字符和n个权值,建立赫夫曼树,并将它存于文件hfmTree中。 2. void Encoding()

利用已建好的赫夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。利用for循环实现顺序查找和相应的结点匹配将编码存入文件中。

3. void decoding()利用已建好的赫夫曼树将文件CodeFile中的代码进行译码,结果存入文件Textfile中。同样利用顺序查找的方法实现字符和编码的一一匹配。 4. void Print() 印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。将已经译码好的文件按照一定规则输出。 5. void TreePrint(int m,int n) 采用递归算法,实现赫夫曼树以直观的方式(比如树)显示在终端上,同时将此字符形式的赫夫曼树写入文件TreePrint 中。 6. int main()

主函数主要设计的是一个分支语句,让用户挑选所实现的功能。以及一些界面设计的功能。

3)系统结构图(功能模块图)

五、 详细设计

※ 哈夫曼编码/译码器的源代码

#include //需要用到的头文件 #include #include #include #include #include using namespace std;

#define maxleaf 30 //定义最多的叶子结点 #define len 20

typedef struct{ //赫夫曼树的结构体 char ch; double weight; //权值 int parent; int lchild; int rchild; }hnode,*hfmtree;

typedef hnode huffman[maxleaf*2-1];

huffman h; //定义一个结构数组 int leaves;

typedef struct{ //用于存储哈夫曼编码 int start; int bit[len]; }hcode;

typedef hcode huffcode[maxleaf]; huffcode code;

//初始化哈夫曼树,参考书本上两个算法,并合并 void Initialization(){ //书本算法1

cout<<\输入节点的个数:\ //输入叶子结点的个数 cin>>leaves; int i,j; for(i=0;i>h[i].weight; } for(i=0;i

} //书本算法二 int p,c; hcode hf; //赫夫曼编码,将每个叶子结点编码 fstream file(\ for(i=0;i

//输入字符,用于实现哈夫曼编码 void Encoding(){ cout<<\请输入需要编码的字符串:\ char m; fstream file(\ getchar(); while((m=getchar())!='\\n'){ for(int i=0;i


赫夫曼编码(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2000年全国高考化学试卷

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: