C++实现哈夫曼编码完整代码.doc

C++实现哈夫曼编码完整代码.doc

ID:56785437

大小:35.00 KB

页数:10页

时间:2020-07-11

C++实现哈夫曼编码完整代码.doc_第1页
C++实现哈夫曼编码完整代码.doc_第2页
C++实现哈夫曼编码完整代码.doc_第3页
C++实现哈夫曼编码完整代码.doc_第4页
C++实现哈夫曼编码完整代码.doc_第5页
资源描述:

《C++实现哈夫曼编码完整代码.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、#include#includeusingnamespacestd;#includetypedefstruct{//霍夫曼树的结构体charch;doubleweight;//权值,此处为概率intparent,lchild,rchild;}htnode,*hfmtree;typedefchar**hfmcode;/*****************************全局变量*****************************/hfmtreeHT;hfmcodeHC;int

2、n=0;//霍夫曼树叶节点个数intm=0;//霍夫曼树所有节点个数int*code_length;//用于记录每个消息字符的码长/*****************************霍夫曼编码模块*****************************///对输入的字符进行检验intInput_Char_Check(){intflag=1;intj;for(inti=1;i

3、lag;}//对输入的概率进行检测intInput_Weight_Check(){intflag=0;doublesum=0.0;for(inti=1;i<=n;i++){if(!(HT[i].weight>0&&HT[i].weight<1))//概率越界{flag=1;returnflag;}else{sum+=HT[i].weight;continue;}}if(sum>1)//概率之和超过1{flag=2;}returnflag;}voidSelect(inta,int*p1,int*p2)/*Select函数,选出HT树到a为

4、止,权值最小和次小且parent为0的2个节点*/{inti,j,x,y;for(j=1;j<=a;++j){if(HT[j].parent==0){x=j;break;}}for(i=j+1;i<=a;++i){if(HT[i].weight

5、ight&&HT[i].parent==0&&x!=i){y=i;//选出权值次小的节点}}if(x>y){*p1=y;*p2=x;}else{*p1=x;*p2=y;}}/*初始化n个叶子节点及其余节点*/voidInit_htnode(){inti;chartemp_ch;doubletemp_w;I:cout<<"请输入信源发出的消息字符个数:";cin>>n;if(sizeof(n)!=sizeof(int)

6、

7、n<=1)//若输入的不是整数,则报错{cout<<"您输入的数据有误,程序终止!"<

8、ode_length=newint[n+1];for(i=1;i<=n;i++){code_length[i]=0;//初始化码长为0}m=2*n-1;HT=(hfmtree)malloc((m+1)*sizeof(htnode));printf("请输入字符信息,,字符对应的概率:");for(i=1;i<=n;++i)//初始化n个叶子结点{//printf("请输入第%d个字符信息:",i);cin>>temp_ch;//printf("请输入第%d个字符对应的概率:",i);cin>>temp_w;HT[i].ch=temp_c

9、h;HT[i].weight=temp_w;HT[i].parent=0;HT[i].lchild=0;HT[i].rchild=0;}intflag1=Input_Char_Check();//检测输入的字符是否重复intflag2=Input_Weight_Check();//检测输入的概率是否越界if(!flag1){cout<<"出现相同字符,输入错误,请重新输入!"<

10、<<"概率之和超过1,输入错误,请重新输入!"<

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

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

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