数据结构课程设计报告 实验二 哈夫曼编码
目录
一. 问题描述及分析 1.问题描述 2.需求分析 二. 功能模块及数据结构描述 1.数据结构描述 p1 2.模块描述 p2
三.主要算法流程描述 1.编码流程图 p3 2.译码流程图 p4
四.使用说明 五.调试分析说明
p1
p1 p1
p1
p2
p5 p6
数据结构课程设计报告 周经辉 20084001
一. 问题描述及分析
1.问题描述
设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件(后缀名.cod);反过来,可将一个编码文件还原为一个文本文件(.txt)。
2.需求分析
(1)输入一个待压缩的文本文件名,统计文本文件中各字符的个数作为权值,生成哈夫曼树;
(2)将文本文件利用哈夫曼树进行编码,生成编码文件(后缀名cod); (3)输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码;
(4)显示指定的编码文件和文本文件;
3.运行要求
.Windows xp/2003 .VC++6.0(或以上)运行库
二. 功能模块及数据结构描述
1.数据结构描述
{
long weight;
long lchild,rchild,parent; typedef struct
}hfmt;
hfmt t[2*256-1];
1
数据结构课程设计报告 周经辉 20084001
存放哈夫曼树结构体,weight为节点权值,lchild,rchild为节点的左右孩子在向量中的下标(为叶节点时,两值为:-1),parent为节点的双亲在向量中的下标(用来区别根与非根节点,值为-1与非-1)。
typedef struct {
char bits[256]; long s;
}hfmcc; hfmcc cc[256];
存放哈夫曼编码结构体,s用来指示编码在位串bits[n]中的起始位置。
2.模块描述
图2.1 系统函数
copy函数:根据s的值在位串bits[n]中提取有效编码位数。 HFM函数:对读入的节点权值,生成哈夫曼树。
HFMBM函数:对生成的哈夫曼树进行零一编码,对应于原文件字符。
三.主要算法流程描述
2
数据结构课程设计报告 周经辉 20084001
1.编码流程图
3
开始 键入文件名(.txt) 读文件操作 字符权值统计 文件是否读完 生成哈夫曼树 生成哈夫曼编码 生成.cod编码文件 结束 图2.2 编码流程图
数据结构课程设计报告 周经辉 20084001
2.译码流程图
4
开始 键入文件名(.cod) 读文件操作 文件是否读完 扫描哈夫曼树 是否为叶节点 译码写入新文件,并返回根节点 是否为根节点 输出错误编码 结束 图2.3 译码流程图