1 / 6
文档名称:

哈弗曼编码实现无损压缩实验报告.doc

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

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

分享

预览

哈弗曼编码实现无损压缩实验报告.doc

上传人:crh53719 2020/9/29 文件大小:66 KB

下载得到文件列表

哈弗曼编码实现无损压缩实验报告.doc

相关文档

文档介绍

文档介绍:哈弗曼编码实现无损压缩实验报告院系:自动化学号:1010200249姓名:王江鹏指导老师:何新实验内容通过C++编程实现。要求:1)字符串的输入是手工输入的;2)通过程序实现编码,最终在屏幕上显示编码结果,例如,如果选用huffman编码,则要显示字符串的编码以及平均码长;源代码#include<>#include<string>#defineMAXVALUE100000#defineMAXLEAF256#defineMAXNODEMAXLEAF*2-1chara[100000]={0};intqq=0,coun=0;//qq是统计文本中有多少个不同的字符,coun是统计文本中有多少个字符floatavlen=0;/*FILE*f;f=fopen("D:\","r");*///建立文本函数voidcreat_save(){ inti=0; printf("pleaseinputtext\n"); gets(a);while(a[i]!=NULL) { i++; coun++; }printf("coun=%d",coun);}//统计字符频率函数ints[256]={0};//s[0]到s[255]分别对应字母的ASCII码由0到255的统计个数voidcount(){ inti=0,f=0; charm; while(i<coun)//不能用cout<<a;进行输出会将a的指针移动 { m=0; for(intj=0;a[i]!=m;j++) m++; s[m]++; i++; } printf("\n"); /*for(i=0;i<256;i++) printf("%3d",s[i]);*/ while(f!=255) { if(s[f]!=0) qq++; f++; } printf("\nqq=%d\n",qq);}//构造Huffman树*****************************3typedefstruct{ intweight; intparent; intlchild; intrchild; charnum;}HNodeType;HNodeTypeHuffNode[MAXNODE];//MAXNODE代表所有结点的个数intn;//叶子结点个数voidHuffmanTree(){ inti,j,m1,m2,x1,x2; n=qq;//叶子结点的个数 for(i=0;i<MAXNODE;i++) { HuffNode[i].weight=0; HuffNode[i].parent=-1; HuffNode[i].lchild=-1; HuffNode[i].rchild=-1; HuffNode[i].num=-1; }// cout<<"请分别输入各个叶子结点的权值:"<<endl; j=0; for(i=0;i<256;i++) { if(s[i]!=0) { HuffNode[j].weight=s[i]; HuffNode[j].num=i; j++; } } for(i=0;i<n-1;i++)//构造哈弗曼树 { m1=m2=MAXVALUE; x1=x2=0; for(j=0;j<n+i;j++)//选取最小和次小的两个权值,其中n+i中的i代表已经多加了i个非叶子结点