哈夫曼编码问题
利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。根据哈夫曼编码的原理,根据用户输入的一段文本,请编程实现的哈夫曼编码的编码与解码过程,并给出该段文本的编码结果与解码结果。
注意:1.测试文本可以预先存储在文件中
2.叶结点的权重直接从文本中统计得出
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define MAXVALUE 10000 //定义最大权值
#define MAXLEAF 30 //定义哈夫曼树中叶子结点个数
#define MAXNODE MAXLEAF*2-1 //定义哈夫曼总结点数
#define MAXSIZE 256
int n;
char str[MAXLEAF];
typedef struct
{
int weight;
int parent;
int rchild;
int lchild;
}HNodeType;
typedef struct
{
char data;
int weight;
}HDatatype;
typedef struct
{
HDatatype data[MAXSIZE];
int number;
}HNodeNum;
/*
找到各个字符的权重并排序
*/
void Find_Weight(HNodeNum ** pHn,char val[])
{
int i,j;
HDatatype t;
*pHn = (HNodeNum* )malloc(sizeof(HNodeNum));
(*pHn)->number = 0;
for(i=0;i<MAXSIZE;i++) //初始化存放数据所对应的权重
{
((*pHn)->data[i]).weight = 0;
}
for(i=0;val[i]!='\0';i++) //存放数据并计算各种字符的权重
{