哈夫曼树

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

承诺书

郑重声明:本人所呈交的课程设计是本人在导师指导下独立撰写并完成的,课程设计没有剽窃、抄袭、造假等违反学术道德、学术规范和侵权行为。本课程设计不包含任何其他个人或集体已经发表或撰写过的研究成果,如果引用则标识出了出处。对本课程设计的研究做出贡献的个人和集体,均已在文中以明确方式标明。

课程设计与资料若有不实之处,本人承担一切相关责任。特此声明。

签名:

年月日

目录

一.需求分析 (3)

1.问题描述 (3)

2.功能要求 (3)

二.系统总框图和功能模块说明.4

1.系统总框图 (4)

2.功能模块说明 (4)

2.功能模块说明 (4)

3.系统设计 (4)

3.1主要链表 (4)

3.2主要功能函数 (6)

3.3关键函数的流程图 (6)

4.系统调试: (9)

5.总结 (13)

6.源程序: (13)

一.需求分析

哈夫曼编/译码器

1.问题描述

利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼编/译码系统。

2.功能要求

I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。

E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。

D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。

P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码写入文件CodePrint中。

T:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。

二.系统总框图和功能模块说明

图1. 系统总框图

2.功能模块说明

(1).初始化; Initialization(LiHTNode *&ht);

(2).编码; Encoding(LiHTNode *&ht,LeafCode *&lc);(3).译码; Decoding(LeafCode *&lc);

(4).印代码模块; Print();

(5).印哈夫曼树。 Tree_Printing(LiHTNode *&ht);

3.系统设计

3.1主要链表

struct LiHTNode //用于建立哈夫曼树

{

char data; //节点

double weight; //权值

char code; //编码

LiHTNode *parent; //双亲

LiHTNode *lchild; //左孩子

LiHTNode *rchild; //右孩子

};

存储结构如图所示

图2. 哈夫曼树节点存储结构

struct LeafCode //用于存储叶子节点和哈夫曼编码{

char leaf; //叶子

char code[N]; //叶子到根节点的编码串

int top; //栈顶指针

LeafCode *next;

};

存储结构如图所示

图3. 叶子哈夫曼编码存储结构

3.2主要功能函数

Initialization(LiHTNode *&ht) //初始化

Encoding(LiHTNode *&ht,LeafCode *&lc) //编码 Decoding(LeafCode *&lc) //译码

Print() //印代码模块

Tree_Printing(LiHTNode *&ht) //印哈夫曼树

3.3关键函数的流程图

(1). Initialization(LiHTNode *&ht) //初始化

图4. 初始化

(2). Encoding(LiHTNode *&ht,LeafCode *&lc) //编码

图5. 编码

(3). Decoding(LeafCode *&lc) //译码

图6. 译码

(4). Print() //印代码模块

图7. 印代码模块

(5). Tree_Printing(LiHTNode *&ht) //印哈夫曼树

图8. 印哈夫曼树

4.系统调试:

(1).调试结果如下:

图9. 调试结果

(2).终端显示如下:

图10. 终端显示

图11. 终端显示

图12. 终端显示

(3).各文件如下:

1).文件hfmTree.txt

2).文件ToBeTran.txt

3).文件CodeFile.txt

图15. 文件CodeFile.txt

4).文件TextFile.txt

图16. 文件TextFile.txt 5).文件Codeprint.txt

图17. 文件Codeprint.txt

6).文件TreePrint.txt

相关文档
最新文档