本文介绍了采用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

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

  1. YUI Compressor插件压缩后war中的js/css文件未压缩的解决方法(被maven打包顶替了)

    YUI Compressor Maven插件可以压缩/合并js或css文件,经常用在Maven项目中,但最近发现在wabapp中执行了 mvn install 命令进行发布之后,终端中显示插件已经执行 ...

  2. 文件在线压缩与解压|基于Springboot实现文件在线压缩与解压

    收藏点赞不迷路  关注作者有好处 文末获取源码 项目编号:BS-XX-178 一,项目简介 主要使用 gzip协议对上传到服务器的文件进行在线压缩和解压操作. 二,环境介绍 语言环境:Java:  j ...

  3. php如何解压 .bz2文件,Linux_备份压缩--bzip2,功能说明:.bz2文件的压缩程序 - phpStudy...

    备份压缩--bzip2 功能说明:.bz2文件的压缩程序. 语 法:bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][- 压缩等级] ...

  4. c语言Linux用线程创建文件,Linux环境下C语言线程创建---简单代码

    在Linux环境下用C语言编写线程创建. //file name: pthreadtext.c #include #include //线程头文件 //pthread不是linux下的默认的库,也就是 ...

  5. python分割压缩_【python 多线程】下载文件分批压缩

    大体做的功能为: 1.调用api接口,获取json数据:2.json 数据转换为一个csv文件:3.csv文件里的每行数据转换成单个xml文件:4.每5个xml文件进行打包 用到的模块为: csv,x ...

  6. R语言list.files函数获取文件列表实战

    R语言list.files函数获取文件列表实战 目录 R语言list.files函数获取文件列表实战 #仿真数据 #基本语法

  7. 【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 头文件定义 | 头文件导入限制 | 兼容 C++ 语言 | 函数形参输入输出属性注释)

    文章目录 一.头文件定义 1.头文件导入限制 2.兼容 C++ 语言 3.函数形参输入输出属性 4.代码示例 一.头文件定义 1.头文件导入限制 头文件导入限制 : 防止头文件多次导入 , 将头文件的 ...

  8. WinRAR文件分卷压缩具体使用方法图文教程

    WinRAR是很多电脑用户都在使用的一款文件压缩软件,今天,我们就一起来认识一下WinRAR的一个非常使用的功能:文件分卷压缩功能.那么,什么是文件分卷压缩功能,文件分卷压缩有什么用呢?文件分卷压缩有 ...

  9. 【Python】将文件夹压缩成zip包

    使用python将文件夹压缩成zip包的过程: 先创建空的zip文件,然后遍历读取文件夹中文件,依次塞进zip文件中,即完成压缩. 例如,要将testDir文件夹压缩成test.zip,并存放在同级目 ...

最新文章

  1. cxgrid中纵横单元格合并_被合并单元格折磨疯的我,真后悔没早点知道这个Excel技巧!...
  2. grails日志系统的研究
  3. julia(5)-变量与内部常量
  4. 内购订单进行二次处理_独家独到飞豹FBA亚马逊退货处理,实现二次销售不是问题...
  5. CentOS设置开机自动启动某服务
  6. 使用RDLC报表(二)--使用自定义数据集
  7. less学习三---父选择器
  8. c#自动更新+安装程序的制作
  9. PHP学习总结(5)——PHP入门篇之PHP字符串
  10. 操作系统中的互斥锁与条件变量
  11. makefile模板
  12. SetupFactory使用
  13. 如何拥有一个自己的公网IP地址
  14. 思源黑体与思源宋体的区别
  15. python 安全编码代码审计
  16. SFTP上传下载文件工具类
  17. iview中Page分页组件添加首页尾页按钮
  18. emui 4.1 基于android 6.0,【荣耀V8评测】基于Android 6.0的EMUI 4.1_荣耀 V8_手机评测-中关村在线...
  19. 2022年全球市场颈椎按摩仪总体规模、主要生产商、主要地区、产品和应用细分研究报告
  20. 【工控老马】用西门子PLC构成管道压力控制系统

热门文章

  1. 树莓派最新raspbian系统换国内源
  2. java 多态的应用——多态数组和多态参数详解
  3. 设计原则(5)-迪米特法则
  4. 微信提现功能测试点【杭州多测师】【杭州多测师_王sir】
  5. 角谷猜想(卡拉兹猜想)
  6. 大数据运维工程师面试题目
  7. 大数据时代网络安全分析
  8. 解决百度网盘上传请求中或上传慢的方法
  9. 很色,非常色,十分色,格外色,异常色,特别色,相当色,太色了!
  10. C语言小项目 扫雷游戏