基于哈夫曼编码的任意文件压缩与解压
说明:
本人是初学者,只是想分享下自己的心得,大侠勿笑。
上学期刚学完数据结构,假期要做个课程设计,就是《基于哈夫曼编码的任意文件压缩与解压》,大家都知道哈夫曼树和哈夫曼编码是如何构造的,但是可能有些朋友不知道如何把哈夫曼编码变为真正的二进制文件(至少我们同班的同学也不是全部知道,而且网上搜过下,也找不到相关介绍),所以就想在此讲下自己的方法,至于正确与否,望大家指正!
另外,这里主要讲的是哈夫曼编码构造出来后的事情,至于哈夫曼树和编码的构造,用的是严蔚敏的《数据结构》或李春葆的《数据结构教程》的方法。
由于是直接从word中copy的,效果不太好,可以点击下载doc文件
控制台源程序:在vc6,vc8中测试过,点击下载
(程序写得不好,比较混乱,效率不高,建议用release,快好多的)
MFC版演示程序:点击下载
1.
问题描述:
将任意一个指定的文件进行哈夫曼编码,并以真正的二进制位生成一个二进制文件(压缩文件);反过来,可将一个压缩文件解码还原为原来的文件。
2.
数据结构描述:
以下是哈夫曼树结点的结构: 哈夫曼树以数组形式保存,其元素个数是2n-1,
struct HTNode
{
char data; //
结点值
int weight; //
权值
;
int parent; //
父结点下标
int lchild; //
左孩子下标
int rchild; //
右孩子下标
};
|
用一个数组记录,该数组元素是指向字符的指针
举例:设{a,b,c,d,e,f,g,h} 其权值 w={5,29,7,8,14,23,3,11} 则:
a
|
5
|
9
|
-1
|
-1
|
b
|
29
|
14
|
-1
|