logo资料库

哈夫曼编码-译码器课程设计报告.docx

第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
资料共24页,剩余部分请下载后查看
课程设计报告的基本内容
计算机算法 课程设计报告 计算 1* -- * 班 第 * 组 名 成 绩 学 号 1********7 1********2 1********2 1********4 姓 *** ** ** ***
课程设计报告的基本内容 1、概述 1)任务:哈夫曼编码/译码器。利用哈夫曼算法的编码和译码系统,可以接 收从键盘输入的字符集大小、字符和权值信息,创建哈夫曼树生成哈夫曼编码并 能对其进行解码。 2)设计内容: 1.存储结构:分别采用动态和静态存储结构; 2.哈夫曼编码与译码功能; 3.显示哈夫曼树。 3)分工说明: **:哈夫曼朱初始化,编码并显示编码。 **:动态存储与静态存储,译码功能。 ***:界面设计优化,将权值数据存放在数据文件中。 ***:显示哈夫曼树,汇总代码。 2、总体设计 1)软件结构设计:本程序主要分为 4 个模块(功能模块图见下图):主模块、 编码模块、译码模块、显示哈夫曼树模块。程序的主体部分,分别调用各个模块, 实现各项功能。编码模块:对每个出现的字符进行编码。译码模块:将已有编码 译成字符,使之可以直接被读出。显示模块:将建立的哈夫曼书打印出来。 哈夫曼编码/译码器 主 模 块 编 码 模 块 译 码 模 块 显 示 Hufffman 树
2)数据结构设计: 全局变量:number 作用:用来打印哈夫曼树每个节点前空格数量。 数组:HTNode HFT[26] 作用:静态存储哈夫曼树。 结构体:typedef struct { char character; //权重 int weight; int parent,lchild,rchild; }HTNode, *HuffmanTree; typedef char * *HuffmanCode; //双亲,左、右孩子 //哈夫曼树(动态分配数组) //哈夫曼编码表 作用:动态建立哈夫曼树。 文件:据文件 data.txt。作用:将权值数据存放在数据文件中。 类:class Huffman 作用:创建哈夫曼树。 3、详细设计及实现 哈夫曼树的建立由赫夫曼算法的定义可知,初始森林中共有 n 棵只含有 根结点的二叉树。算法的第二步是:将当前森林中的两棵根结点权值最小的 二叉树,合并成一棵新的二叉树;每合并一次,森林中就减少一棵树,产生 一个新结点。显然要进行 n-1 次合并,所以共产生 n-1 个新结点,它们都 是具有两个孩子的分支结点。所以,最终求得的哈夫曼树中一共有 2n-1 个 结点,其中 n 个结点是初始森林的 n 个孤立结点,剩余 n-1 结点为新合成节 点。并且哈夫曼树中没有度数为 1 的分支结点。因此我们利用一个大小为 2n--1 的一维结构体数组来存储哈夫曼树中的结点。 哈夫曼编码是可变字长编码。编码时借助哈夫曼树,也即带权路径长度 最小的二叉树,来建立编码。 译码的思想是:输入译码码值,并与原先生成的哈夫曼编码表比较,遇 到相等时,就取出与之相对应的字符存入一个新串中。
程序调试情况: 程序测试情况: 程序运行首先出现的界面:
选择操作 1 后,输入相应的字符及其权值,生成哈夫曼树。系统会显示对字 符串进行哈弗曼编码,并将其进行动态和静态存储,进而将权值数据存放在数据 文件 data.txt 中。
选择步骤 2 后,将哈夫曼树生成的哈夫曼编码显示出来。 选择操作 3 后,输入字符串,系统会显示对字符串进行哈弗曼编码得到的哈 弗曼编码。
选择操作 4 后,输入哈夫曼编码,系统会对哈夫曼编码进行译码,用哈夫曼 编码翻译成的字符。 选择操作 5 后,打印哈夫曼树。
选择操作 0 后,退出系统。
分享到:
收藏