- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计报告
实验二 哈夫曼编码
目录
问题描述及分析 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)