huffydict.h

来自「有关huffman的程序对大家学习数据结构有好处但不是所有人都用得上」· C头文件 代码 · 共 65 行

H
65
字号
// HuffyDict.h: interface for the HuffyDict class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_HUFFYDICT_H__F4280FED_383D_4F1B_9251_63FD049AC322__INCLUDED_)
#define AFX_HUFFYDICT_H__F4280FED_383D_4F1B_9251_63FD049AC322__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "HuffmanDict.h"
#include "ProgressListener.h"

#include <list>

class HuffyDict : public HuffmanDict  
{
public:
	HuffyDict();
	virtual ~HuffyDict();

	//Inherited methods:

	EncEntry * GetEncodeDict();

	//Custom methods:
	void SetUIHelper(ProgressListener *NewProgress) { MyListener=NewProgress; }

	void CreateAdaptedDict(FILE *FreqSource);

	bool Deserialize(FILE *TableSource);
	bool Serialize(FILE *TableTarget);

protected:
	EncEntry *MyTable;

private:
	struct HNode
	{
		unsigned int Weight;
		unsigned char Symbol;
		HNode *Left,*Right,*Parent;

		HNode() { Left=Right=Parent=NULL; }
		HNode(unsigned int NewSymbol, unsigned int NewWeight)
		{
			Left=Right=Parent=NULL;
			Symbol=NewSymbol; Weight=NewWeight;
		}
		~HNode() { delete Left; delete Right; }
	};

	ProgressListener *MyListener;

	void FillFreqA(FILE *InFile, unsigned int *OutA);
	HNode *BuildHuffTree(unsigned int *FreqA);
	void BuildHuffTable(HNode *HTreeRoot, EncEntry *OutTable);
	void BuildTableInternal(HNode *HTreeRoot, unsigned int CurrCode, unsigned char CurrCodeLen, EncEntry *OutTable);

	void OrderedInsert(std::list<HNode *> &TargetList, HNode *NewNode);
};

#endif // !defined(AFX_HUFFYDICT_H__F4280FED_383D_4F1B_9251_63FD049AC322__INCLUDED_)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?