怎么基于c++实现的哈夫曼编码解码操作

  介绍

这篇文章将为大家详细讲解有关怎么基于c++实现的哈夫曼编码解码操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

具体如下:

哈夫曼编码是一个通过哈夫曼树进行的一种编码,一般情况下,以字符:“0 & # 39;与1 & # 39;表示。编码的实现过程很简单,只要实现哈夫曼树,通过遍历哈夫曼树,这里我们从每一个叶子结点开始向上遍历,如果该结点为父节点的左孩子,则在字符串后面追加“0”,如果为其右孩子,则在字符串后追加“1”。结束条件为没有父节点,然后将字符串倒过来存入结点中。

c++实现代码如下:

# include   # include   using  namespace 性传播疾病;   struct 节点   {   double 才能;体重;   string 才能,ch;   string 才能;代码;   int 才能;lchild, rchild,,父母;   };   void 选择(Node  huffTree [],, int  *,, int  * b, int  n)//找权值最小的两个a和b   {   int 才能;我;   double 才能;weight =, 0;,//找最小的数   for 才能;(小姐:=,0;,小姐:& lt; n;,我+ +)   {才能   ,,,if  (huffTree[我].parent  !=, 1),,,//判断节点是否已经选过   ,,,,,继续;   ,,,   ,,,{   ,,,,,if  (weight ==, 0)   ,,,,,{   ,,,,,,,weight =, huffTree[我].weight;   ,,,,,,,* a =,我;   ,,,,,}   ,,,,,   ,,,,,{   ,,,,,,,if  (huffTree[我].weight  & lt;,重量)   ,,,,,,,{   ,,,,,,,,,weight =, huffTree[我].weight;   ,,,,,,,,,* a =,我;   ,,,,,,,}   ,,,,,}   ,,,}   ,,}   weight 才能=,0,,//找第二小的数   for 才能;(小姐:=,0;,小姐:& lt;, n;,我+ +)   {才能   ,,,if  (huffTree[我].parent  !=, 1, | |,(小姐:==,*))//排除已选过的数   ,,,,,继续;   ,,,   ,,,{   ,,,,,if  (weight ==, 0)   ,,,,,{   ,,,,,,,weight =, huffTree[我].weight;   ,,,,,,,* b =,我;   ,,,,,}   ,,,,,   ,,,,,{   ,,,,,,,if  (huffTree[我].weight  & lt;,重量)   ,,,,,,,{   ,,,,,,,,,weight =, huffTree[我].weight;   ,,,,,,,,,* b =,我;   ,,,,,,,}   ,,,,,}   ,,,}   ,,}   int 才能;温度;   if 才能;(huffTree [*] .lchild  & lt;, huffTree [* b] .lchild),//小的数放左边   {才能   ,,,temp =, *一个;   ,,,* a =, * b;   ,,,* b =,温度;   ,,}   }   void  Huff_Tree (Node  huffTree [],, int  w [], string  ch [],, int  n)   {   for 才能;(int 小姐:=,0;,小姐:& lt;, 2, *, n 作用;1;,我+ +),//初始过程   {才能   ,,,huffTree[我].parent =, 1;   ,,,huffTree[我].lchild =, 1;   ,,,huffTree[我].rchild =, 1;   ,,,huffTree[我].code =,““   ,,}   for 才能;(int 小姐:=,0;,小姐:& lt;, n;,我+ +)   {才能   ,,,huffTree[我].weight =, w(我);   ,,,huffTree[我].ch =, ch(我);   ,,}   for 才能;(int  k =, n;, k  & lt;, 2, *, n 作用;1;,k + +)   {才能   ,,,int  i1 =, 0;   ,,,int  i2 =, 0;   ,,,选择(huffTree,,, i1,,, i2, k),,//将i1、i2节点合成节点k   ,,,huffTree [i1] .parent =, k;   ,,,huffTree (i2) .parent =, k;   ,,,huffTree [k] .weight =, huffTree [i1] .weight  +, huffTree .weight (i2);   ,,,huffTree [k] .lchild =, i1;   ,,,huffTree [k] .rchild =, i2;   ,,}   }   void  Huff_Code (Node  huffTree [],, int  n)   {   int 才能;i, j, k;   string 才能;s =,““   for 才能;(小姐:=,0;,小姐:& lt;, n;,我+ +)   {才能   ,,,s =,““   ,,,j =,我;   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么基于c++实现的哈夫曼编码解码操作