📄 huffcompress.h
字号:
#ifndef HUFFMANCODING_H
#define HUFFMANCODING_H
#include <iostream>
using namespace std;
#ifndef HUFFTREE_H
#define HUFFTREE_H
class HuffTree;
//声明有序表类
class SAList {
int fence;
int maxSize;
int listSize;
public:
SAList(int size = 0);
~SAList();
HuffTree* *listArray;
void setStart();
void next();
int getLength();
bool insert(HuffTree* item);
HuffTree* remove();
bool lessThan(HuffTree* x, HuffTree* y);
};
//HuffTreeNode的类声明
class HuffTreeNode {
public:
unsigned char value;
unsigned long int weight;
unsigned int leftOrRight; //左0右1
HuffTreeNode *parent;
HuffTreeNode *leftChild;
HuffTreeNode *rightChild;
bool isLeaf;
};
//HuffTree的类声明
class HuffTree {
public:
HuffTreeNode* subRoot;
HuffTree();
HuffTree(unsigned char val, unsigned long int freq);
HuffTree(HuffTree* l, HuffTree* r);
HuffTree* buildHuffTree(SAList *sal, SAList *copy );
};
#endif
//栈结构
struct Link {
unsigned int element;
Link *next;
Link(const unsigned int &elemval, Link *nextval = NULL);
Link(Link *nextval = NULL );
};
struct LStack {
Link* top;
int size;
LStack() { size = 0; top = NULL; }
~LStack() { clear(); }
void clear();
bool push(const unsigned int &item);
bool pop(unsigned int &it);
};
//缓冲区
struct Buffer {
unsigned char byte; //字节
unsigned int bits; //位
void clear(); //清空
};
//临时保存叶子结点的数域
struct Save {
unsigned char ch;
unsigned long int val;
};
class Huffcompress {
private:
SAList *list, *copy;
HuffTree* tree;
Buffer buffer;
LStack *stack;
Save save;
FILE *sourceFile; //源文件
FILE *targetFile; //压缩文件
unsigned long int total; //源文件的总字节数
unsigned long int ch[257]; //可编码的字符
unsigned int numOfLeaf; //需要建立叶结点的个数
public:
void compress(); //压缩
void decompress(); //解压
void buildSAList(); //建立有序表
void write(unsigned int c); //从缓冲区中向压缩文件输出字符
void exportSAList(); //压缩文件中导出有序表
unsigned int read(); //从压缩文件提取字符
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -