1 / 27
文档名称:

哈弗曼编码解码器课程设计.doc

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

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

分享

预览

哈弗曼编码解码器课程设计.doc

上传人:wz_198613 2019/10/31 文件大小:352 KB

下载得到文件列表

哈弗曼编码解码器课程设计.doc

相关文档

文档介绍

文档介绍://课程设计:哈弗曼编码解码器及报告书//vc6测试可以//运行的条件是:“”,“”,“”存在,要压缩的信息已存//在了其他一个文本文档中,然后根据提示输入要压缩的文本文件名,输入的文件名要//,如:。//#include<iostream>#include<fstream>#defineMax50#defineMAX10000usingnamespacestd;structtree//存储统计的频率和字母的{ charword; intrare;};structBianma//存各字母所对应的编码的{ charword; intcode[Max];};structelement//哈弗曼树的{ treeweight; intlchild; intrchild; intparent; intflag; intyezi;};//__________________________________全局变量elementhuffTree[103];Bianmabianma[52];intzijie,wei,yushu;charfilename[50];//___________________________________classHuffmanTree{public: voidopen();//打开要编码文件并统计字母出现的频率函数 voidcreat();//构造哈弗曼树函数 intselect(intk);//找权值最小根节点函数 voidcoding();//编码函数 voiddecoding();//将编码后信息存入文件函数 voidoriginal();//对已压缩文件解压并译码函数 pare();//压缩函数 voidyasuoxianshi();//显示压缩信息 voidjieyaxianshi();//显示解压信息 voidxianshi();//显示文件压缩比 voidmenu();//菜单};//___________________________________________________________________________________________________voidHuffmanTree::open()//打开文件并统计频率{ charch; inti,n,j=0,flag=0; for(i=0;i<103;i++)//初始化 { huffTree[i].=0; huffTree[i].=0; huffTree[i].yezi=0; } cout<<"请输入您要压缩的文件名:"<<endl; cin>>filename; ifstreaminfile(filename,ios::out);//打开文件 if(!infile) { flag=1; cerr<<"文件打开失败!"<<endl; exit(1); }if(flag==0) { cout<<"压缩中,请等待……"<<endl<<endl<<endl; } while((ch))//统计频率 { if(ch>=65&&ch<=90)//65~90 { i=ch-65; huffTree[i].++; huffTree[i].yezi=1; } if(ch>=97&&ch<=122)//97~122 { n=ch-71; huffTree[n].++; huffTree[n].yezi=1; } } (); }//_____________________________________________________________________________________________________voidHuffmanTree::creat()//构造哈弗曼树{ inti,k,i1,i2,n=52,j; for(i=0;i<2*n-1;i++)//初始化 { huffTree[i].parent=-1; huffTree[i].lchild=-1; huffTree[i].rchild=-1; huffTree[i].flag=0; } for(i=0;i<26;i++)//字母赋值 { huffTree[i].=i+65; }for(j=0;j<26;j++)//字母赋值 { huffTree[j+26].=j+97; } for(k=n;k<2*n-1;k++)//建树{ i1=select(k); i2=select(k