用C语言编写程序实现Zip或者Rar无损压缩算法

 用C语言编写程序实现Zip或者Rar无损压缩算法

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*                                                                  *
*HUFF.C Huffman encode for multimedia application 8*8 pixel Ver 3  *
*                                                                  *
*Ver 1:  Complied in Borland Turbo C++ 3.0                         *
*Ver 2:  Complied in Microsoft Visual C++ 6.0                      *
*Ver 3:  Complied in Microsoft Visual C++ 6.0                      *
*          add code to print code table of the compression         *
*          print output message in Chinese                         *
*                                                                  *
*by Lee Meitz, Solid Mechanics, Huazhong Univ of Sci and Tech      *
*2001.11.15 - 2001.12.27                                           *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define  DNUM 64    //define data number 8*8
#define  LOOP 10000 //times of compression

typedef struct
{
    unsigned short weight, data;
    unsigned short parent, lchild, rchild;
} HuffNode;

typedef struct
{
    unsigned char code;
    unsigned short codelength;
} HuffCode;

unsigned int fCount[256] = {0};
unsigned int data_num;
unsigned int code_size;
unsigned int last_bit;
void FrequencyCount(unsigned char*);         //频率统计
void HuffSelect(HuffNode*, int, int*, int*); //从结点中选出权最小的两个节点
void HuffmanCodeTable(HuffNode*, HuffCode*); //构造huffman树,生成huffman编码表
void HuffmanCompress(unsigned char*, unsigned char *, HuffCode*); //压缩数据
void BitPrint(unsigned char*);               //按位打印结果,用于调试

void main()
{
    int i, j, loop;                               //variable for loop
    HuffNode hfdata[2*DNUM] = { {0, 0, 0, 0, 0}};  //Huffman node
    HuffCode code_table[256] = { {0, 0}};          //code table will be searched by subscript

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值