基于哈夫曼编码的任意文件压缩与解压

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

struct HTNode
{
    char data;    // 结点值
    int weight;   // 权值 ;
    int parent;   // 父结点下标
    int lchild;   // 左孩子下标
    int rchild;   // 右孩子下标
};
 
typedef char* HCode;
 
                                             其中n为叶子数。对应结点的哈夫曼编码

                                        用一个数组记录,该数组元素是指向字符的指针

 

 
 
 
 
 

 
举例:设{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
  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值