没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论














计算机算法
课程设计报告
计算 1* -- * 班 第 * 组
学 号 姓 名 成 绩
1********7 ***
1********2 **
1********2 **
1********4 ***

课程设计报告的基本内容
1、概述
1)任务:哈夫曼编码/译码器。利用哈夫曼算法的编码和译码系统,可以
接收从键盘输入的字符集大小、字符和权值信息,创建哈夫曼树生成哈夫曼编
码并能对其进行解码。
2)设计内容:
1.存储结构:分别采用动态和静态存储结构;
2.哈夫曼编码与译码功能;
3.显示哈夫曼树。
3)分工说明:
**:哈夫曼朱初始化,编码并显示编码。
**:动态存储与静态存储,译码功能。
***:界面设计优化,将权值数据存放在数据文件中。
***:显示哈夫曼树,汇总代码。
2、总体设计
1)软件结构设计:本程序主要分为 4 个模块(功能模块图见下图):主模
块、编码模块、译码模块、显示哈夫曼树模块。程序的主体部分,分别调用各
个模块,实现各项功能。编码模块:对每个出现的字符进行编码。译码模块:
将已有编码译成字符,使之可以直接被读出。显示模块:将建立的哈夫曼书打
印出来。
哈夫曼编码/译码器

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 个新结点,
它们都是具有两个孩子的分支结点。所以,最终求得的哈夫曼树中一共有
主
模
块
编
码
模
块
译
码
模
块
显
示
Hufffman
树

2n-1 个结点,其中 n 个结点是初始森林的 n 个孤立结点,剩余 n-1 结点
为新合成节点。并且哈夫曼树中没有度数为 1 的分支结点。因此我们利用
一个大小为 2n--1 的一维结构体数组来存储哈夫曼树中的结点。
哈夫曼编码是可变字长编码。编码时借助哈夫曼树,也即带权路径长度
最小的二叉树,来建立编码。
译码的思想是:输入译码码值,并与原先生成的哈夫曼编码表比较,遇
到相等时,就取出与之相对应的字符存入一个新串中。
程序调试情况:
程序测试情况:
程序运行首先出现的界面:

选择操作 1 后,输入相应的字符及其权值,生成哈夫曼树。系统会显示对
字符串进行哈弗曼编码,并将其进行动态和静态存储,进而将权值数据存放在
数据文件 data.txt 中。
剩余21页未读,继续阅读
资源评论


苦木兑咖啡
- 粉丝: 22
- 资源: 3
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
