赫夫曼编码

来源:百度知道 编辑:UC知道 时间:2024/06/30 09:42:53
#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#define MAXSIZE 100
#define MAXWEIGHT 29
typedef struct {
char data;
int weight;
int parent,lchild,rchild;
}HTnode;
typedef struct
{
char cd[MAXSIZE];
int start;
}huffcode;

/*==========================建立哈夫曼树=============================*/
void creatrehuffmantree(HTnode ht[])
{ int n;
int i,k,l,r,min1,min2;

for(i=0;i<2*n-1;i++)
ht[i].parent=ht[i].lchild=ht[i].rchild=0;
for(i=n;i<2*n-1;i++)
{
min1=min2=MAXWEIGHT;
l=r=0;
for(k=0;k<i-1;k++)
if(ht[k].parent==0)
if(ht[k].weight<min1)
{
min2=min1;
r=l;
min1=ht[k].weight;
l=k;
}
else if(ht[k].weight<min2)
{

我有一个C++的,LZ可以参考一下,希望可以帮到你
#include "iostream.h"
#include "iomanip.h"

const int n=8;//n表示叶子数目
const int m=2*n-1;//m为森林中树的棵数

class tree
{public:
float weight;//权值
int parent;//双亲
int lch,rch;//左右孩子
void creathufftree();
};
class codetype
{public:int bits[n+1];//编码的存放位置
int start;//编码开始存放的位置
char ch;//所对应的字符
void huffcode();
void trancode();

};
tree hftree[m+1];//规定从第一个元素hftree[1]开始使用数组元素,故定义长度为m+1而不为m
codetype code[n+1];
void tree::creathufftree()
{
int i,j,p1,p2;
float s1,s2;
for(i=1;i<=m;i++)
{
hftree[i].parent=0;//初始化
hftree[i].lch=0;//初始化
hftree[i].rch=0;//初始化
hftree[i].weight=0;//初始化
}
cout<<"请输入"<<n<<"个权值:"<<endl;
for(i=1;i<=n;i++)
cin>>hftree[i].weight;//输入权值