- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计-哈夫曼编码实验报告
数据结构课程设计报告
实验二 哈夫曼编码
目录
问题描述及分析 p1
1.问题描述 p1
2.需求分析 p1
功能模块及数据结构描述 p1
1.数据结构描述 p1
2.模块描述 p2
三.主要算法流程描述 p2
1.编码流程图 p3
2.译码流程图 p4
四.使用说明 p5
五.调试分析说明 p6
问题描述及分析
1.问题描述
设计一个哈夫曼编码/译码系统,对一个文本文件中的字符进行哈夫曼编码,生成编码文件(后缀名.cod);反过来,可将一个编码文件还原为一个文本文件(.txt)。
2.需求分析
(1)输入一个待压缩的文本文件名,统计文本文件中各字符的个数作为权值,生成哈夫曼树;
(2)将文本文件利用哈夫曼树进行编码,生成编码文件(后缀名cod);
(3)输入一个待解压的压缩文件名称,并利用相应的哈夫曼树将编码序列译码;
(4)显示指定的编码文件和文本文件;
3.运行要求
.Windows xp/2003
.VC++6.0(或以上)运行库
功能模块及数据结构描述
1.数据结构描述
typedef struct
{
long weight;
long lchild,rchild,parent;
}hfmt;
hfmt t[2*256-1];
存放哈夫曼树结构体,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函数:对生成的哈夫曼树进行零一编码,对应于原文件字符。
三.主要算法流程描述
1.编码流程图
图2.2 编码流程图
2.译码流程图
图2.3 译码流程图
四.使用说明
图2.4 生成的文件
本软件默认生成的编码文件名为:a.cod
默认生成的译码文件名为:b.txt
执行提示:输入所要编码的文本文件。
图2.5 编码过程
编码完成,默认生成a.cod文件,等待译码。
输入所要译码的cod文件:
图2.6 译码过程
译码完成,默认生成b.txt文档文件。
五.调试分析说明
表2.1 调试遇到的问题及解决方案
遇到的问题 分类 解决方法 根据所提供的权值不能正确生成哈夫曼树 数据结构基础 哈夫曼树结构体的lchild,rchild,parent用-1初始化,因为0也可能是节点,防止造成冲突
根据生成的哈夫曼树不能有效的生成哈夫曼编码,编码文件中会存在乱码
数据结构基础 所给存储编码的位串数组bits[256]空间大小固定,权值较大的编码长度较短,后半数组空间会有乱码产生,引入函数copy(),根据编码起始位s来截取编码有效位写入文件。
根据编码文件,无法还原生成文本文件,并提示编码错误。
数据结构基础 开始节点i=256*2-1为空节点,其左右孩子指向未知地址空间,无法进入哈夫曼树的扫描,将开始节点改为i=256*2-2,此节点才是哈夫曼树的根节点,问题得以解决。 哈夫曼编码无法与原文本字符对应,在编码结构体添加字符变量去存储相应字符,得不到期望的效果。
C语言基础 构造哈夫曼树时,将其字符的ASCLL码的值与哈夫曼树结构体数组的下标相对应,译码时,直接将其下标当作字符写入文件,问题得以解决。
六.参考文献
严蔚敏,吴伟民,《数据结构》(C语言版)[
文档评论(0)