C++实现哈夫曼编码
本文实例为大家分享了C++实现哈夫曼编码的具体代码,供大家参考,具体内容如下
#include#include #include #include usingnamespacestd; intMax=300; classtree{ public: chars; intnum; tree*left; tree*right; tree(){ s='!'; num=0; left=0; right=0; } tree(chara,intn,tree*p1,tree*p2){ s=a; num=n; left=p1; right=p2; } }; vector open; /********************************* **中序遍历输出各节点及其哈夫曼编码 *********************************/ voidinorder(tree*t,strings){ if(t!=0){ inorder(t->left,s+'0'); if(t->s!='!') cout< s<<":"< right,s+'1'); } } intmain(){ inta[Max]; for(inti=0;i>s; vector v; vector ::iteratorvit; for(inti=0;i s=v[i]; n->num=a[v[i]]; open.push_back(n);//存入open表中 } /************************ ** **构造哈夫曼树 ** *************************/ tree*root; while(open.size()!=1){ tree*min1,*min2;//min1,min2是当前open表中num值最小的节点 intsit1,sit2; min1=open.front(); sit1=0; for(inti=0;i num num){ min1=open[i]; sit1=i; } } open.erase(open.begin()+sit1); min2=open.front(); sit2=0; for(inti=0;i num num){ min2=open[i]; sit2=i; } } open.erase(open.begin()+sit2); tree*t=newtree('!',min1->num+min2->num,min1,min2);//构造新节点,左右指针指min1和min2 open.push_back(t);//存入open表中 root=t; } cout<<"它的哈夫曼编码为:"< 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。