用Huffman编码对文件进行压缩的C语言实现.pdf
福建电脑
48 2012 年第 1 期
用 Huffman 编码对文件进行压缩的 c 语言实现
路炜,门玉梅,李建俊
(河北师范大学附属民族学院河北石家庄 050091 )
[摘 要] :本文介绍了采用 Huffman 编码对ASCII 码文件进行压缩的基本原理,并用 C 语言程序实
现了这个压缩过程。文中给出了比较完整的 C 语言程序代码,可以直接用于调试实验。
【关键词]: Hu岱nan 编码哈夫曼编码哈夫曼树文件压缩 C 语言数据结构
char asciiCode;
1 、引言
unsigned long huffCode;
为了减少文件的存储空间或者在传输文件时减少
int h!IÍf巳odeLen;
网络流量,经常要对文件进行压缩。使用 Huffman 编码
)HuffCode;
进行压缩是一种很好的压缩方法,具有压缩速度快、算
法简单等优点。在《数据结构》实践教学中,必然会遇到
创建由该结构体结点所组成的,长度为 128 的一
让学生利用 Huffman 编码进行文件压缩这样的课题。
维数组 codeList[128] ,且 codeList 中的下标和 ascl
由于教材上只给出了 Huffman 树的定义和编码,因此, iCode 满足下面的顺序存放关系:codeList[i].asciiCode=
很多老师和学生在完成这个课题都时感觉比较困难。
i; 这样的话,查找某个字符 inChar 的 huffman 编码的
本文将给出利用 Huffman 编码对 ASCII 码文件进行压 工作便变得相当轻松了,如下:sHuffCode=codeList[in-
缩的 C 语言程序实现;以供大家参考。
Ch叫.huffCode; 数组 codeList[1281的创建可以采用
2、基本原理
某种遍历方式下的按找到的字符进行置数的方式,十
Huffman 编码是一种常用的压缩编码方法,其基
分的方便。
本原理是将频繁使用的数据用较短的代码代替,较少
3、编程准备
使用的数据用较长的代码代替,每个数据的代码各不
本程序将预先统计好的各个ASCII 码字符出现的
相同,这些代码都是二进制码,且代码的长度是可变
频率(即 Huffman 树的叶子节点权值)放在 key.txt 文件
的,它的实现主要借助于 Huffman 树。用 Huffman 编码
中,然后将这些权值读取出来保存到一个数组中,然后
对文件进行压缩的过程大致分为四个步骤:1 创建