Huffman_Tree.h:
#ifndef Huffman_Tree_h
#define Huffman_Tree_h
#endif
#include <stdio.h>
typedef struct {
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode, * HuffmanTree; //存储赫夫曼树的结点类型
typedef char * * HuffmanCode; //用于存储字符集中各个字符相应的赫夫曼编码
void strcpy(char *S1,char *S2){ //将字符串 S2 复制到 S1
int i = 0;
while( S2[i] != '\0' ){
S1[i] = S2[i];
i++;
}
S1[i] = '\0';
}
//在 HT[1]到 HT[t-1]中找出权值最小的两个 S1 和 S2-----------------------------------------------
void Select(HuffmanTree HT,int t,int &s1,int &s2){
int i = 1;
s1 = s2 = 0;
HT[0].weight = 50000;
while( i <= t ){ //遍历查找权值最小的结点 S1
if( HT[i].parent == 0 && HT[i].weight < HT[s1].weight )
s1 = i;
i++;
}
i = 1;
while( i <= t ){ //遍历查找除 S1 外权值最小的结点 S2
if( i != s1 && HT[i].parent == 0 && HT[i].weight < HT[s2].weight )
s2 = i;
i++;
}
}
//根据各个字符的权值构造赫夫曼树 HT,将对应的赫夫曼编码存储在 HC 中
------------------------------------------------
int HuffmanCoding( HuffmanTree &HT,HuffmanCode &HC,int *w,int n){
int s1,s2,m,i,start;
unsigned int c,f;
HTNode * p;
char *cd;
if( n <= 1 ) return 0;
3