哈夫曼树与文件资料解压压缩c言代码

哈夫曼树与文件资料解压压缩c言代码

ID:29415191

大小:77.12 KB

页数:13页

时间:2018-12-19

哈夫曼树与文件资料解压压缩c言代码_第1页
哈夫曼树与文件资料解压压缩c言代码_第2页
哈夫曼树与文件资料解压压缩c言代码_第3页
哈夫曼树与文件资料解压压缩c言代码_第4页
哈夫曼树与文件资料解压压缩c言代码_第5页
资源描述:

《哈夫曼树与文件资料解压压缩c言代码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1.问题描述哈弗曼树的编码与译码—功能:实现对任何类型文件的压缩与解码—输入:源文件,压缩文件—输出:解码正确性判定,统计压缩率、编码与解码速度—要求:使用边编码边统计符号概率的方法(自适应Huffman编码)和事先统计概率的方法(静态Huffman编码)2.1程序清单程序书签:1.main函数2.压缩函数3.select函数4.encode函数5.解压函数#include#include#include#include#includestructnode{longweight;//权值un

2、signedcharch;//字符intparent,lchild,rchild;charcode[256];//编码的位数最多为256位intCodeLength;//编码长度}hfmnode[512];voidcompress();voiduncompress();//主函数voidmain(){intchoice;printf("请选择1~3:");printf("1.压缩文件");printf("2.解压文件");printf("3.退出!");scanf("%d",&choice);if(choice==1)compress();elseif(choice

3、==2)uncompress();elseif(choice==3)return;elseprintf("输入错误!");}//压缩函数voidcompress(){inti,j;charinfile[20],outfile[20];FILE*ifp,*ofp;unsignedcharc;//longFileLength,filelength=0;intn,m;//叶子数和结点数ints1,s2;//权值最小的两个结点的标号charcodes[256];longsumlength=0;floatrate,speed;intcount=0;clock_tstart1,start2,f

4、inish1,finish2;doubleduration1,duration2;voidencode(structnode*nodep,intn);//编码函数intselect(structnode*nodep,intpose);//用于建哈弗曼树中选择权值最小的结点的函数printf("请输入要压缩的文件名:");scanf("%s",infile);ifp=fopen(infile,"rb");if(ifp==NULL){printf("文件名输入错误,文件不存在!");return;}printf("请输入目标文件名:");scanf("%s",outfile);of

5、p=fopen(outfile,"wb");if(ofp==NULL){printf("文件名输入错误,文件不存在!");return;}start1=clock();//开始计时1//统计文件中字符的种类以及各类字符的个数//先用字符的ASCII码值代替结点下标FileLength=0;while(!feof(ifp)){fread(&c,1,1,ifp);hfmnode[c].weight++;FileLength++;}FileLength--;//文件中最后一个字符的个数会多统计一次,所以要减一hfmnode[c].weight--;//再将ASCII转换为字符存入到结

6、点的ch成员里,同时给双亲、孩子赋初值-1n=0;for(i=0;i<256;i++)if(hfmnode[i].weight!=0){hfmnode[i].ch=(unsignedchar)i;n++;//叶子数hfmnode[i].lchild=hfmnode[i].rchild=hfmnode[i].parent=-1;}m=2*n-1;//哈弗曼树结点总数j=0;for(i=0;i<256;i++)//去掉权值为0的结点if(hfmnode[i].weight!=0){hfmnode[j]=hfmnode[i];j++;}for(i=n;i

7、fmnode[i].lchild=hfmnode[i].rchild=-1;hfmnode[i].parent=-1;}//建立哈弗曼树for(i=n;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。