数据结构课程设计 哈夫曼编译器.doc

数据结构课程设计 哈夫曼编译器.doc

ID:56779764

大小:142.00 KB

页数:24页

时间:2020-07-09

数据结构课程设计 哈夫曼编译器.doc_第1页
数据结构课程设计 哈夫曼编译器.doc_第2页
数据结构课程设计 哈夫曼编译器.doc_第3页
数据结构课程设计 哈夫曼编译器.doc_第4页
数据结构课程设计 哈夫曼编译器.doc_第5页
资源描述:

《数据结构课程设计 哈夫曼编译器.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、.中南大学数据结构课程设计报告题目哈夫曼编译器学生姓名指导教师学院信息科学与工程学院专业班级计科1302Word资料.目录实验要求……………………………………………3问题描述……………………………………………3问题解决方法………………………………………3程序模块功能及流程图……………………………4调试与测试…………………………………………8测试结果……………………………………………9心得体会……………………………………………11源代码………………………………………………12Word资料.一.实验要求(1)从键盘读入字符集大小n,以及n个字符和

2、权值,建立哈夫曼树。(2)利用已建好的哈夫曼树对文件正文进行编码,将结果存入相关文件中。(3)利用已建好的哈夫曼树将编码文件中的代码进行译码,结果存入文件中。(4)输出代码文件,以紧凑格式显示。二.问题描述利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。对于双向传输信息的信道,每端都需要一个完整的编译码系统。为这样的信息收发站编写哈夫曼编译系统。哈夫曼树又称最优二叉树,构造的规则即给定n个权值不同的叶子节点,构造一棵二叉树,使二叉树的

3、带权路径长度达到最小。具体做法即要使权值较大的结点离根节点较近,权值较小的结点离根节点较远。三.问题解决方法建立哈夫曼树时要进行多次选择,每次选择出权值最小和次小的两个节点,Word资料.将两结点权值相加,作为新生成父节点的权值。并分别将其作为左、右孩子。再将父节点加入需选择的结点序列中,继续选择,直到将所有节点都选完为止,构成一颗哈夫曼树。每种字符对应一个节点,将每种字符的出现次数作为对应节点权值。在编码过程中,较科学的方法是统计文章中每种字符出现的频率,并以其作为对应节点的权值,使出现频率较高的节点离根结点较近,从而使出现频率越高的字符所

4、得的编码位数越少,这样做得到的编码结果是最简练的,也更有利于译码。编码需从叶节点向上回溯,若叶节点为其父结点的左孩子,则编码为0,若为右孩子,则编码为1。然后将父节点作为下一轮循环的子节点,继续重复上述步骤,直至到达根节点为止,即得到初始叶节点对应的编码。译码是编码的逆过程,所以译码只需读入编码位串,从根结点开始,若读到0,则走向左孩子,读到1,则走向右孩子。并将对应的子节点作为下一轮循环的叶节点,重复上述步骤,直至到达最终叶节点,该叶节点即为编码对应的节点。四.程序模块功能及流程图1.主要程序模块及功能(1)建立哈夫曼树数据结构:tree[

5、]为定义在Huffmantree类上的数组对象。n为节点个数,即字符种类数。m为建好的哈夫曼树的总节点数,在哈夫曼树中,m=2*n-1。Smal、small2分别存放每轮循环中权值最小和次小的节点的权值。Word资料.p1,p2分别记住每次合并时权值最小和次小的两个根结点的下标。对应代码段:for(i=0;i

6、ree[i].lchild=-1;tree[i].rchild=-1;tree[i].weight=0;}for(i=0;i

7、ee[j].weight

8、ee[p2].weight;}(2)编码模块数据结构:Code[]为定义在codetype类上的数组对象。c为缓冲变量,其值为当前节点的下标值。p为父节点的下标值。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。