- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本程序是本人学习数据结构时自己写的,可以压缩、解压缩任意格式文件。由于本人水平有限,里面会有缺陷,若有兴趣,可以多多指正!!! Email:e9999e@163.com
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////[BEGIN]////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//时间:2012年5月9日10:24:19
//编译器:VC++6.0
//数据组织:参见程序的详细说明
//功能:哈弗曼压缩文件(可以 压缩并解压 任何格式文件),参见程序的详细说明
//历时:2天
/*
***************************************************************************
Bug修复
***************************************************************************
【2012.5.10 18:13:00 修复了:文件中只有一种英文字符无法压缩和解压缩的Bug。解决办法参见本文件中哈夫曼树的创建函数】
【2012.5.10 20:49:00 修复了:不能准确还原文件的Bug,是解压文件与原文件大小等完全相同,另外还可以压缩、解压其他任何类型文件(doc、jpg等)。具体修复办法参见压缩、解压缩】
*/
/*
*************************************************************************** 程序的详细说明
***************************************************************************
本程序是适用于所有格式文件。。。。
//-----------------【注意,以下是对于文本文件的思考。因为是二进制操作文件,故适用于所有格式文件】
如何实现压缩文件呢,首先考虑到字符存储问题,英文是一个字节存储的,汉子是两个字节存储的。
都属于定长存储(定长编码),可以利用哈夫曼树对其进行编码,使其转换为变长的前缀编码。
那么,如何实现编码的转换呢 ? 考虑到汉子也可以将其两个字节分别处理,故这里采用单个字节处理的办法,
将每个字节进行编码。
首先读取文件,计算出每个字节出现的次数。次数即权值,对其进行构造哈夫曼树,然后求出编码,将编码存储在一个
二维数组中。再次打开想要压缩的文件,每读入一个字节,就对其进行编码,并写入压缩文件。
由于将编码后的数据写入压缩文件时,需整个字节操作,即编码数据刚好整个字节时(可以是多个字节)写入压缩文件,
故此处利用一个整形变量作为缓冲。
解压缩时,需再次将 与压缩时相同的哈夫曼树 构造出来,以便进行译码。因此压缩时存储了,原文件中各个字节出现的
次数(也就是权值),这样就能再次构造出哈夫曼树。【注意】这里当然也可以将哈夫曼树存储下来,解压时再次重构。
解压时,读取字符出现的次数,重构出哈夫曼树,进行译码。这里也是读取整个字节(可以是多个),按位进行译码。
*/
/////////////////////////////////////////////////////////////////////////////////////////
#include iostream
#include string
#include fstream
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////////
//HuffmanNode 节点定义
struct HuffmanNode
{
unsign
您可能关注的文档
- 大学英语教育论文:大学英语教学中学生自主学习能力培养.doc
- 公路工程基本建设项目设计文件编制办法().doc
- 杭州湾跨海大桥栈桥设计计算书.doc
- 河北公务员行测真题.doc
- 环评技术方法考试真题.doc
- 解放牌CAVL载货汽车总体设计及后悬架总成设计.doc
- 理想混合气体与湿空气.doc
- 江门商品混凝土购销合同.doc
- 交通运输课程论文蓝登杭.doc
- 论现代科技在刑事案件侦破中应用2.doc
- 铁路隧道底鼓风险动态评估与综合整治技术的深度剖析与实践应用.docx
- 吸收犯存在范围的多维审视与界定.docx
- 大学生陌生人信任度:现状剖析与影响因素的深度探究.docx
- 全球金融危机下上海经济学门类毕业生就业的冲击与调适:基于多维度的剖析与展望.docx
- 小型软件团队敏捷风险管理:策略、实践与优化路径.docx
- 锦红片在ERCP术后高淀粉酶血症及胰腺炎预防中的临床价值探究.docx
- 法治视角下我国湿地保护的困境与突破.docx
- 从法律基石到多元实践:非物质文化遗产进校园的深度剖析与展望.docx
- 行政决策责任追究制度的法治化进路.docx
- 基于ORACLE的校园一卡通消费系统设计方案.docx
文档评论(0)