以下是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