哈夫曼编码译码系统的实现,主要包含三部分:
1、创建哈夫曼树
2、编码函数
3、译码函数
编写代码时为了方便,在这里混用了c++的输入输出流。主体用c语言实现。
下面是代码部分:
1、头文件,以及储存结构:
#include<stdio.h>
#include<iostream>
using namespace std;
#define MAX 2000
typedef char ElemType;
typedef struct{
ElemType data;
int w;
int parent,lchild,rchild;
}HFMTNode;
2、哈夫曼树的创建,Ht储存全部节点的权值,n代表叶子节点数量。
void menu(HFMTNode Ht [],int n);//原型声明
void CreatHFMTree(HFMTNode Ht[],int n)//创建哈夫曼树
{
int i,j,k,lmin,rmin;
int min1,min2,m1;
for(i=1;i<2*n;i++)
{
Ht[i].parent=Ht[i].lchild=Ht[i].rchild=-1;
}
for(i=n+1;i<2*n;i++)
{
min1=min2=MAX;
lmin=rmin=-1;
for(k=1;k<i;k++)
{
if(Ht[k].parent==-1)//只在尚未构造的二叉树节点中运行
{
if(Ht[k].w<min1)
{
min2=min1;
rmin=lmin;
min1=Ht[