资源描述:
《数据结构(5)_文件压缩.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数据结构实验报告实验名称:文件压缩实验类型:综合性试验班级:20112111学号:2011211107姓名:冯若航实验日期:2003.6.19下午4:001.问题描述文件压缩①基本要求哈夫曼编码是一种常用的数据压缩技术,对数据文件进行哈夫曼编码可大大缩短文件的传输长度,提高信道利用率及传输效率。要求采用哈夫曼编码原理,统计文本文件中字符出现的词频,以词频作为权值,对文件进行哈夫曼编码以达到压缩文件的目的,再用哈夫曼编码进行译码解压缩。l统计待压缩的文本文件中各字符的词频,以词频为权值建立哈夫曼树,并将该哈夫曼树保存到文件HufTree.dat中。l根
2、据哈夫曼树(保存在HufTree.dat中)对每个字符进行哈夫曼编码,并将字符编码保存到HufCode.txt文件中。l压缩:根据哈夫曼编码,将源文件进行编码得到压缩文件CodeFile.dat。l解压:将CodeFile.dat文件利用哈夫曼树译码解压,恢复为源文件。2.数据结构设计此类问题,应设计文件的数据结构。*4压缩头标记*1文件名长度*ns文件名*4源文件长度*1020huffman树*1021~EOF文件内容赫夫曼树节点的数据结构typedefstructnode{longw;//权shortp,l,r;//父亲,左孩子,右孩子}HTNO
3、DE,*HTNP;//霍夫曼树的结点精选范本,供参考!赫夫曼编码数组元素的数据结构设计typedefstructhuffman_code{BYTElen;//长度BYTE*codestr;//字符串}HFCODE;//霍夫曼编码数组元素3.算法设计源代码#define_CRT_SECURE_NO_DEPRECATE#include#include#includetypedefunsignedintUINT;typedefunsignedcharBYTE;typedefstructnode{lo
4、ngw;//权shortp,l,r;//父亲,左孩子,右孩子}HTNODE,*HTNP;//霍夫曼树的结点typedefstructhuffman_code{BYTElen;//长度BYTE*codestr;//字符串}HFCODE;//霍夫曼编码数组元素#defineOK1#defineERROR-1#defineUNUSE-1//未链接节点标志#defineCHAR_BITS8//一个字符中的位数#defineINT_BITS32//一个整型中的位数#defineHUFCODE_SIZE256//霍夫曼编码个数#defineBUFFERSIZE2
5、56//缓冲区大小大小#defineUINTSIZEsizeof(UINT)#defineBYTESIZEsizeof(BYTE)#defineTAG_ZIGHEAD0xFFFFFFFF//压缩文件头标#defineMAX_FILENAME512//函数声明//压缩模块intCompress(char*SourceFilename,char*DestinationFilename);//压缩调用intInitializing(char*SourceFilename,FILE**inp,char*DestinationFilename,FILE**ou
6、tp);//初始化文件工作环境longAnalysisFiles(FILE*in,long精选范本,供参考!frequency[]);//计算每个不同字节的频率以及所有的字节数intCreateHuffmanTree(longw[],intn,HTNODEht[]);//生成霍夫曼树intHuffmanTreeCoding(HTNPhtp,intn,HFCODEhc[]);//霍夫曼编码intSearch(HTNPht,intn);//查找当前最小权值的霍夫曼树节点并置为占用BYTEChar2Bit(constBYTEchars[CHAR_BITS]
7、);//将一个字符数组转换成二进制数字intSearch(HTNPht,intn);//查找当前最小权值的霍夫曼树节点并置为占用intWriteZipFiles(FILE*in,FILE*out,HTNPht,HFCODEhc[],char*SourceFilename,longsource_filesize);//写压缩文件//解压缩模块intDeCompress(char*SourceFilename,char*DestinationFilename);//解压缩调用intInitializing_Dezip(char*SourceFilenam
8、e,FILE**inp,char*DestinationFilename,FILE**outp);//为处理