huffman编码压缩c语言,用Huffman编码对文件进行压缩的C语言实现

本文介绍了采用Huffman编码对ASCII码文件进行压缩的基本原理,并用C语言程序实现了这个压缩过程。文中给出了比较完整的C语言程序代码,可以直接用于调试实验。

建电

21 0 2年第 1期

用 Hu ma码对文件进行压缩的 C语言实现 f n编

路炜,门玉梅,李建俊

(河北师范大学附属民族学院河北石家庄 0 0 9 5 0 1)

【要】摘:本文介绍了采用 Huma编码对 A C I f n S I码文件进行压缩的基本原理,并用 C语言程序实

现了这个压缩过程。文中给出了比较完整的 C语言程序代码,以直接用于调试实验。可

【关键词】 Hu ma码哈夫曼编码哈夫曼树文件压缩 c语言数据结构: f n编

1引言、

c a s iC d; h ra c i o e

为了减少文件的存储空间或者在传输文件时减少网络流量 .常要对文件进行压缩。用 Hu m n编码经使 fa f进行压缩是一种很好的压缩方法。具有压缩速度快、算法简单等优点。《在数据结构》实践教学中,然会遇到必让学生利用 H f a u m n编码进行文件压缩这样的课题。

由于教材上只给出了 Hu m n树的定义和编码 . f a f因此,

u sg e o ghu Co e n in dl n f d;

i th fC d Le; n uf o e n

l ufo e H f d; C

创建由该结构体结点所组成的 .长度为 1 8的一 2

维数组 c d Ls 1 8,且 cd Ls的下标和 ac o e i[2 1 t oei t中 si . io e足下面的顺序存放关系:o e i[. cio e Cd满 cd Ls ia i d= t] s C很多老师和学生在完成这个课题都时感觉比较困难 i这样的话。找某个字符 iC a的 h f a:查 n hr uf n编码的 m本文将给出利用 H f a uf n编码对 A C I文件进行压 m S I码工作便变得相当轻松了。如下: ufo e c d Ls i— s f d=oei[ H C tn缩的 C语言程序实现:以供大家参考。 C刚 . f oe h h C d;数组 cd Ls 18的创建可以采用 u oe i[2 1 t

2基本原理、

某种遍历方式下的按找到的字符进行置数的方式 .十 Hf a uf n编码是一种常用的压缩编码方法 .其基分的方便。 m 本原理是将频繁使用的数据用较短的代码代替.较少 3、程准备编

使用的数据用较长的代码代替 .每个数据的代码各不本程序将预

先统计好的各个 A C I S I码字符出现的相同 .这些代码都是二进制码 .且代码的长度是可变频率 f H f n树的叶子节点权值)在 k y x文件即 uf ma放 e.t t的。的实现主要借助于 H f a它 uf n树。用 H f a m uf n编码 m中。然后将这些权值读取出来保存到一个数组中 .后然对文件进行压缩的过程大致分为四个步骤:建 1创再根据此数组构造 H f a uf n树 .出各字符的 H f a m得 uf n m Hfa uf n树并生成哈夫曼编码: m 2打开需要压缩的文编码值。K yt文件内容如下: e .t x 件: 3将需要压缩的文件中的每个 A CI码对应的 SI o,,,,,,,,,6,8 0,,8,,,,,,,,, 0,,…,, 0, o0ooooo08 93 9, 03 5000000000, 0000000, Huf n编码按 bt f ma i单位输出;件压缩结束。 4文 2 1,81,,,,, 4 1 53, 1 51 2 A62,81,,,… 1o0 1 8, 9,40 7 3 1,4, 1,,1 A1,83,l 1 2 ,,, 5 2 2 4 4 6 7 2 4 其中。步骤 1步骤 3是压缩过程的关键。步骤 1 1 0 1,94, 0, 233 1,… 7, 05,43,87。83,8647,,,和 9,68, 0, 0…,561154 0, 23,31,4 1,99,,055

所要做工作是得到 H f a u m n数中各叶子结点字符出现 1 0 1 952 52 14 6 1,,,45,1 7,60o 8,,,6,5,1, 073 3,73,, 2,,; 8 2 0 2 2 的频率并根据这个频率创建 H f a uf n树。统计字符出 m 4 C语言代码实现、现的频率可以有很多方法:如每次创建前扫描被创建本程序中生成 H f a构体的声明、 uf a uf n结 m H f n树 m的文件。实时”“地生成各字符的出现频率:者是创建或和编码生成的代码请见参考文献『1 1中相应算法,文对前即做好统计。文采用后一种的方案,本统计了十余篇件进行压缩的核心代码如下: 不同的文章中各个 A C I符出现的频率步骤 3将 S I字 vi m i i g, a ag )主函数, o a ( t r c r r D/ d

n na c h * v *函数人口,注意:需要被压需要压缩的文件中的每个 A C I对应的 H f n编缩文件名作为参数} S I码 u ma,码按 bt位输出 . i单这里涉及到“转换”“出”和输两个关

l注:程序中变量的声明省略。, 本

0,,,95,900,,4,6 1 11 26 71 9 1 74,0802,411 43 0 094,64,, 03 6, 1,0,3,4,5,24,,2 1,1,7, 7

键步骤:转换”部分大可不必去通过遍历 H f n“ u ma树来找到每个字符对应的哈夫曼编码 .以将每个 H f可 uf _ ma值及其对应的 A C I存放于如下所示的结构 n码 S I码

体中:

t p d fsr c y e e tu t

w i ( efn uFl )对文件进行压缩/ hl !fo( p ti) e i e

f cu t0 o n=;

o t t t= x; u pu Da a 0 01

w i ( u t8 hl c n< ) eo

(icrn e= c re ) f uIdx= uL n ({ifo( p ti ) bek f ̄fn uFl ) ra; ( i e iD t=gtO p ti ) n a fecn uFl; a e

f

注:河北师范大学附属民族学院校本科研课题《于项目导向的”据结构’基数’教学研究》课题编号:0 0 0 0— 课程, 2 1 1Y 6 3

1-1958-png_6_0_0_0_0_871_1152_871.56_1152-1482-0-0-1482.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值