大二课程设计日志:文件压缩软件(三)

霍夫曼压缩程序设计

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);     //读取压缩文件头,读出霍夫曼编码表,构建霍夫曼树,按照霍夫曼树由根到叶读取



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

你可能感兴趣的:(压缩,日志,文件,软件,课程)