哈夫曼树及哈夫曼编码 C++代码实现

/*哈夫曼编码*/

#include

using namespace std;
 
//********************************
//构造哈夫曼树
//********************************
 
/*哈夫曼树顺序表的定义*/
typedef struct
{
       intweight;
       intparent,lchild,rchild;
}HTNode;
 
typedef HTNode * HuffmanTree;
 
 
/*初始化一个哈夫曼树*/
void InitHuffmanTree(HuffmanTree&HT,int m)
{
       inti;
       HT=newHTNode[m];
       for(i=0;i>HT[i].weight;
       }
 
       for(i=n;i>q;
              HC[i].ch=q;
              start=n-1;
             
              c=i;
              while((p=HT[c].parent)>=0)
              {
                     --start;
                     cd[start]=(HT[p].lchild==c)?'0':'1';
                     c=p;
              }
              strcpy(HC[i].bits,&cd[start]);
       }
      
       deletecd;
}
 
/*哈夫曼编码的输出*/
void OutputHuffmanCode(HuffmanCode&HC,int n)
{
       inti;
       for(i=0;i>i;
       HuffmanTreeHT;
       HuffmanCodeHC;
 
       CreateHaffmanTree(HT,i);
       CreateHuffmanCode(HT,HC,i);
       OutputHuffmanCode(HC,i);
}

唉,这个程序,用了我两天的时间,主要在一个地方,就是SelectMin()函数,其他的都简单,就是这里是一个瓶颈,突破它,就出来了。我参考了很多人写的这个函数,但是我测试了几组数据,都不符合,虽然是一个很简单的事情,可是用程序写出来,就不那么容易了。我自己写的我觉得比较繁杂,不是很简练,也许是算法不好,希望有谁有好的算法的,请指点一下!


PS:另外推荐一个让大家真正练手的网站:猪八戒威客网,在这里可以按自己的能力去接一些程序设计的任务。我觉得这是一种很不错的学习方法,当你接了别人的任务,无形中就给了自己压力和动力,然后就会主动的去查询资料,分析问题,可能会历经艰辛才能解决问题,但这中间的过程是很珍贵的,你会通过自己的努力学到很多课本上没有学到的东西,也能过一回需求分析的瘾,真实的体会到和客户进行交流的诸多“纠结”,最后,如果你的努力得到客户的认可,可以获得一笔小小的佣金,当做对自己的奖励,更重要的是,通过做任务,你能体会到自己存在的价值感和对自己能力的肯定!


你可能感兴趣的:(数据结构)