压缩解压缩实验报告.docVIP

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

压缩解压缩实验报告 导读:就爱阅读网友为您分享以下“压缩解压缩实验报告”资讯,希望对您有所帮助,感谢您对92的支持! 实验报告 班级 学号 姓名 饶亚民 日期 一、 题目要求: 利用Huffman 树及其编码原理写一个压缩和解压缩程序 二、 概要设计 根据对用户输入的内容判断用户是要求压缩还是解压缩, 若是压缩, 则读入需压缩的文件(以二进制形式打开), 求文件中字符的权重, 构建Huffman 树, 求每个字符的Huffman 编码, 然后依次读入需压缩文件的内容, 把其每个字符用其Huffman 编码代换存入一数组中, 输出到输出文件中。输出文件格式为--.zap (也是二进制形式输出)。 若是解压缩,则根据读入文件的内容(以二进制形式打开),先判断是否为本压缩程序所压缩,若非,则报错。若是,则依次读入存入该文件中的原来压缩文件的后缀名,原来文件中每个字符的权重,然后依据已存的每个字符的权重构建Huffman 树, 接着求每个字符的Huffman 编码。然后依次读入文件中的已存的以Huffman 编码结果储存的0和1字符,按照Huffman 编码结果,左子树为0,右子树为1,直至叶子节点,然后就可得到该Huffman 编码所存储的字符值,然后依次输出到输出文件中,其中有一个count ,用来记录已输出的字符个数,当它等于被压缩的文件长度时就停止。 三、 详细设计 详细数据结构定义: #includestdio.h #includestdlib.h #includemalloc.h #includestring.h #include”head.cpp” #include”BitWriting-Reading.cpp” #include”Directions.cpp” #include”Compress.cpp” #include”FindName.cpp” #include”filecompress.cpp” #include”Huffman Code.cpp” #include”DeCompress.cpp” #include”Match.cpp” #define TRUE 1 #define FALSE 0 #define ERROR 0 #define OK 1 typedef int Status; typedef struct { unsigned int weight; unsigned int parent,lchild,rchild; }HTNode,*HuffmanTree; typedef char **HuffmanCode; 具体实现过程: main(int argc,char *argv[])//若argc=1则按报错处理 然后调用Match 函数Match(argv[1],flag),其作用是用来判断用 户输入的内容 Status Match(char *argv,int flag) { char *parameters[]={“compress” , “decompress” , “help” }; int i; for (i=0;i3;++i) { if (!strcmp(parameters[i],argv)) { flag=i+1; return OK; } } flag=0; return OK; } 若flag=0,则按报错处理,并提示用户可以参考’help ’; 若flag=1,则说明是要压缩,接着判断argv[2]是否为空,若不 为空,则将其视为输出文件的文件名,若为空,则默认为输入文件名为输出文件名,仅后缀不同而已。然后调用函数 FileCompress(argv[2],argv[2/3]): Status FileCompress(char *input,char *output),该函数首先判断输入的文件能否打开,若非,则报错。若是,就依次读入输入文件每个字符,求其权重,并用数组weight[257]表示,然后根据weight 构建Huffman 树,具体实现如下所示: HuffmanCoding(HT,HC,weight,256);HuffmanCoding具体如下: Status Select(HuffmanTree HT,int k,int s1,int s2) { int i=0,j=0; while (HT[i].parent) { ++i; } s1=i; ++i; while (HT[i].parent) { ++i; } s2=i; if (HT[s1].weightHT[s2].weight) { j=s1;s1=s2;s2=j; } for (++

文档评论(0)

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

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

1亿VIP精品文档

相关文档