哈夫曼编/译码器

写一个哈夫曼码的编/译码系统,要求能对要传输的报文进行编码和解码。构造哈夫曼树时,权值小的放左子树,权值大的放右子树,编码时右子树编码为1,左子树编码为0.

输入表示字符集大小为n(n <= 100)的正整数,以及n个字符和n个权值(正整数,值越大表示该字符出现的概率越大);输入串长小于或等于100的目标报文。

经过编码后的二进制码,占一行;

以及对应解码后的报文,占一行;

最后输出一个回车符

5 a b c d e 12 40 15 8 25

bbbaddeccbbb

00011111110111010110110000

bbbaddeccbbb

#include 
#include 
#include 
#include 

#define MAXBIT 100
#define MAXNODE 1000
#define MAXNUM 100000
#define MAXWEIGHT 1000

using namespace std;

//编码结构体
typedef struct
{
    int bit[MAXBIT];
    int start;
}HCodeType;

//结点结构体
typedef struct
{
    int weight;
    int parent;
    int lchild;
    int rchild;
    char value;
}HNodeType;

void HuffmanTree(HNodeType HuffNode[],int n)
{
    int i,j;
    //结点初始化
    for(i=0;i<2*n-1;i++)
    {
        HuffNode[i].weight=0;
        HuffNode[i].parent=-1;
        HuffNode[i].lchild=-1;
        HuffNode[i].rchild=-1;
        HuffNode[i].value=-1;
    }
    //叶子结点的编码和权重
    for(i=0;i>HuffNode[i].value;
    for(i=0;i>HuffNode[i].weight;
    for(i=0;i

你可能感兴趣的:(哈夫曼编/译码器)