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