文件压缩与解压实验报告.docVIP

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

院 系:计 算 机 学 院 实验课程:实验3 实验项目:文本压缩与解压 指导老师: 开课时间:2010 ~ 2011年度第 1学期 专 业: 班 级: 学 生: 学 号: 一、需求分析 1.本程序能够实现将一段由大写字母组成的内容转为哈弗曼编码的编码功能以及将哈弗曼编码翻译为字符的译码功能。 2.友好的图形用户界面,直观明了,每一个操作都有相应的提示,用户只需按着提示去做,便能轻松实现编码以及译码的效果,编码及译码结果都被保存成txt文档格式,方便用户查看。 3.本程序拥有极大的提升空间,虽然现在只能实现对大写字母的译码以及编码,但通过改进鉴别的算法,即能够实现小写字母乃至其他特殊符号等的编码。 4.本程序可用于加密、解密,压缩后文本的大小将被减小,更方便传输 5.程序的执行命令包括: 1)初始化 2)编码 3)译码 4)印代码文件 5)印哈弗曼树 6)退出 6.测试数据 (1)THIS PROGRAM IS MY FAVOURITE (2)THIS IS MY FAVOURITE PROGRAM BUT THE REPORT IS NOT 二、概要设计 为实现上述功能,应有哈弗曼结点,故需要一个抽象数据类型。 1.哈弗曼结点抽象数据类型定义为: ADT HaffTree{ 数据对象:HaffNode* ht,HaffCode* hc 基本操作: Haffman(int w[],int n) 操作结果:构造哈弗曼树及哈弗曼编码,字符集权值存在数组w,大小为n setdep() setdep(int p,int l) 操作结果:利用递归,p为哈弗曼节点序号,l为哈弗曼节点深度 setloc() 操作结果:设置哈弗曼节点坐标,用以输出到界面 setloc2() 操作结果:设置哈弗曼节点坐标,用以输出到文本,默认状态下不启用 } ADT HaffTree 2.本程序包含4个模块 1)主程序模块: 接受用户要求,分别选择执行①初始化②编码③译码④印代码文件⑤印哈弗曼树 ⑥退出 2)哈弗曼树单元模块——建立哈弗曼树 3)哈弗曼编码单元模块——进行哈弗曼编码、译码 4)响应用户操作,输出内容到界面或文本 各模块之间的关系如下: 三、详细设计 1.全局变量、结点 int m_gcharnum;//记录字符集大小全局变量 int t;//用于输入框弹出次数的计数 int *w;//用于存储各个字符权值的数组 int x;//用于计算各个哈弗曼结点x坐标的全局变量 int initswitch;//用于判断是否已经进行了初始化操作 int printtree;//用于判断哈弗曼树是否已经生成的操作 HaffTree HF; //哈弗曼树类 struct HaffNode { int weight;//记录结点权值 int parent;//记录结点双亲序号 int lchild;//记录结点左孩子序号 int rchild;//记录结点右孩子序号 int x;//记录x坐标 int y;//记录y坐标 int dep;//记录深度 int sn;//记录空格个数 int k;//0为左孩子,1为右孩子,-1为根 string s; }; struct HaffCode { int bit[28];//记录各结点的哈弗曼编码 int start;//记录遍历哈弗曼树的起始位置 int weight;//记录结点权值 }; 2.哈弗曼树的实现 //函数名:Haffman //功能:生成哈弗曼树,为每一个哈弗曼结点生成哈弗曼编码 //函数参数:int w[]引入各个字符的权值 // int n字符集大小 void HaffTree::Haffman(int w[],int n) { int i,j,m1,m2,x1,x2;//m1,m2表示最小、次小x1,x2表示左右孩子 for(i=0;i2*n-1;i++)//进行初始化操作,记录权值 { if(in)ht[i].weight=w[i];else ht[i].weight=0;//赋权值 ht[i].parent=0;//清空父母序号 ht[i].lchild=-1;//清空左孩子序号 ht[i].rchild=-1;//清空右孩子序号 } for(i=0;in-1;i++)//寻找最小、次小,生成双亲 { m1=m2=1000; x1=x2=0; for(j=0;jn+i;j++) { if(ht[j].weightm1ht[j].parent==0)//如果权值比最小的小,且未获得双亲(未被访问),

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档