霍夫曼压缩程序设计

huf.h设计
#define _MAXNODES 255
//霍夫曼字的结构,0~255是表示读入的字,256~509是建立霍夫曼可取的字
struct hufnode {
unsigned long total;
short bits[_MAXNODES]={-1};
short parent;  //根的parent等于-1
short left,right;  //表示左子树和右子树,无子树用-1表示
}hufnode;//使用别名


hufnode chars[_MAXNODES*2];
short root=-1;    //记录根节点的位置,并要写入压缩文件头中


int init_nodes(char * orgfile);  //读取文件,获得freqency,成功返回0
int encode(char * orgfile,char * encodedfile);    //重新读取文件,并一次按照霍夫曼编码表,将文件压缩存入新的压缩文件,并将编码表写入头中
int decode(char * encodedfile,char * orgfile);    //读取压缩文件头,读出霍夫曼编码表,构建霍夫曼树,按照霍夫曼树由根到叶读取



其实该压缩成功与否,都在于那510hufnode的数据是否正确且齐全。只要根据原始文件,将510hufnode的数据写全,就可以正确构建霍夫曼树,从而可以正确翻译原文件01串,并实现压缩。
在解压时,由于hufnode信息已经写入文件头中,则构建霍夫曼树很简单,之后便是根据压缩代码,单个bit地读入数据,在霍夫曼树上,从根找到叶,完成单个字节的解压。循环操作直至全部解压完成。