哈夫曼树与文件解压压缩C言代码.doc

哈夫曼树与文件解压压缩C言代码.doc

ID:48502396

大小:80.66 KB

页数:24页

时间:2020-02-05

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

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

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

2、de{.专业.专注.......longweight;//权值unsignedcharch;//字符intparent,lchild,rchild;charcode[256];//编码的位数最多为256位intCodeLength;//编码长度}hfmnode[512];voidcompress();voiduncompress();//主函数voidmain(){intchoice;printf("请选择1~3:");printf("1.压缩文件");printf("2.解压文件");printf("3.退出!");scanf("%d"

3、,&choice);if(choice==1)compress();elseif(choice==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;//权值最小的两个结点的标号charco

4、des[256];longsumlength=0;floatrate,speed;intcount=0;clock_tstart1,start2,finish1,finish2;doubleduration1,duration2;voidencode(structnode*nodep,intn);//编码函数intselect(structnode*nodep,intpose);//用于建哈弗曼树中选择权值最小的结点的函数printf("请输入要压缩的文件名:");scanf("%s",infile);.专业.专注.......ifp=fopen(inf

5、ile,"rb");if(ifp==NULL){printf("文件名输入错误,文件不存在!");return;}printf("请输入目标文件名:");scanf("%s",outfile);ofp=fopen(outfile,"wb");if(ofp==NULL){printf("文件名输入错误,文件不存在!");return;}start1=clock();//开始计时1//统计文件中字符的种类以及各类字符的个数//先用字符的ASCII码值代替结点下标FileLength=0;while(!feof(ifp)){.专业.专注.......f

6、read(&c,1,1,ifp);hfmnode[c].weight++;FileLength++;}FileLength--;//文件中最后一个字符的个数会多统计一次,所以要减一hfmnode[c].weight--;//再将ASCII转换为字符存入到结点的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

7、].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

8、=s1;hfmnode[s1].parent=i;s2=select(hfmno

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

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

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