无损数据压缩算法c语言,C语言实现无损压缩算法

本文展示了如何使用C语言实现无损数据压缩算法,包括Huffman编码的构建和数据压缩过程。通过频率统计、Huffman树的构建、编码表生成及数据压缩,实现了对像素数据的压缩,并给出了不同数据集的压缩结果和压缩率。
摘要由CSDN通过智能技术生成

以下是C语言实现无损压缩算法的代码:

#include

#include

#include

#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

unsigned char hfcode[2*DNUM];         //output code

time_t time1, time2;

/* unsigned char pixel[DNUM] = {

1,2,3,4, 1,2,3,4, 1,2,3,4, 1,1,1,1};

*/

/* unsigned char pixel[DNUM] = {

139,144,149,153,155,155,155,155,

144,151,153,156,159,156,156,156,

150,155,160,163,158,156,156,156,

159,161,162,160,160,159,159,159,

159,160,161,162,162,155,155,155,

161,161,161,161,160,157,157,157,

162,162,161,163,162,157,157,157,

162,162,161,161,163,158,158,158};

*/

unsigned cha

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值