实现huffman进行数据压缩
附件是两个工程,一个是huffman这个是实现huffman数据压缩的基本实现,使用方法请看文件huffman.h该工程具有通用性,另一个是winFM这个是用前一个工程经过改造而成的,不具备通用性.但是却是一个成品,用MFC经过包装界面也比较可以,可以让大家参考,希望huffman工程里的代码对大家有用(使用的时候把所有.CPP和.H添加到自己的工程里,然后需要使用函数的时候引用'huffman.h"里的两个函数就可以了),函数经过封装,只有编码和解码两个函数而已,使用起来简单.再着说明下文件压缩后的格式:扩展名是".fm",文件头两个字节是字母"FM"(用来检验文件格式),然后是原始文件名的长度,再来是原始文件长度(解码的时候判断解码结素),接着是原始文件名,再来是是256个unsigned long的数据表示原始文件每个字母出现的次数(用来重新建立huffman树),最后就是数据了,也就是编码后的数据.
注意几点是,解码要是.fm的文件才可以,如果输出文件名是NULL,则自动填写文件名,如:a.txt压缩后生成a.fm.
为了遍历huffman树写了个栈,只所以这么麻烦是考虑效率以非第归形式遍历huffman树.
winFM.rar
(78.24 KB)
huffman.rar
(15.19 KB)
[ 本帖最后由 faminxmu 于 2011-3-2 00:33 编辑 ]