⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 huffcompress.h

📁 通过输入文本文件(待压缩文件)的文件名(.txt)向指定目标文件夹输出压缩文件(文本文件)
💻 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 + -