1 / 9
文档名称:

哈弗曼编码.docx

格式:docx   大小:137KB   页数:9页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

哈弗曼编码.docx

上传人:cai.li.bin 2019/7/10 文件大小:137 KB

下载得到文件列表

哈弗曼编码.docx

相关文档

文档介绍

文档介绍:#include<>#include<>#include<>structType_node{ intfre_; charch; intlc_; intrc_; intfather_; intset;}Node[513];//用于储存哈弗曼节点set标志是否已经进入哈弗曼树father_节点的双亲节点ch字符structtype{ charch; charcode[35]; structtype*next_;};typedefstructtypeCode_type;Code_type*heads[15];//用于存储哈弗曼编码的节点ch字符code哈弗曼编码intcount=0;intfind_min(int);voidinitial(void);voidcreate_Huff(void);voidtrans_ch_code(void);voidtrans(void);voidde_code(void);//函数原型voidprint(void);main(){ clock_ta,b,c,d; a=clock(); c=clock(); create_Huff(); trans_ch_code(); print(); b=clock(); printf("编码过程耗时%d毫秒\n",b-a); a=clock(); trans(); b=clock(); printf("压缩过程耗时%d毫秒\n",b-a); a=clock(); de_code();b=clock();printf("解压过程耗时%d毫秒\n",b-a); d=clock(); printf("程序完成耗时%d毫秒\n",d-c); return0;}voidcreate_Huff(){ FILE*cfPtr; intn,i,min1,min2,sum; initial(); if((cfPtr=fopen("","r"))==NULL) printf("文件无法打开\n"); else { while(!feof(cfPtr)) { n=fgetc(cfPtr); if(Node[n].fre_<=0) { Node[n].ch=n; Node[n].fre_=1;} else Node[n].fre_++; }sum=257; for(i=0;i<256;i++) { min1=find_min(sum); Node[min1].set=1; min2=find_min(sum); Node[min2].set=1;//查找最小的节点并表及其已经被占用 Node[sum].lc_=min1; Node[sum].rc_=min2; Node[sum].fre_=Node[min1].fre_+Node[min2].fre_;Node[min1].father_=sum; Node[min2].father_=sum;//哈弗曼建树过程++sum;//每次合并多一个内部节点} } fclose(cfPtr);}//建立哈弗曼树的过程结束voidtrans_ch_code(void){ Code_type*current,*last; inti,j;chartemp[35];//存储临时的反向哈弗曼编码 intfather;//