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

📄 huffmantree.h

📁 是编译器我花了好几个礼拜才编好的确实难的这是个不错的编译器
💻 H
字号:
// HuffmanTree.h: interface for the CHuffmanTree class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_HUFFMANTREE_H__CE26E6BC_1CF3_431E_A709_BE959DB85859__INCLUDED_)
#define AFX_HUFFMANTREE_H__CE26E6BC_1CF3_431E_A709_BE959DB85859__INCLUDED_

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

#include "stdafx.h"
#include "BinTree3P.h"

const int MaxNum = 50;
/*
class ForestNode{
public:
	CBinTreNode<int> * m_pForest;
	int  m_nCharProbability;

	ForestNode(){
		m_pForest = NULL;
		m_nCharProbability = 0;
	}
};
*/



class CHuffmanTree : public CBinTree3P<int>  
{
	friend class CMyView;
public:
	CHuffmanTree();
	virtual ~CHuffmanTree();

protected:
	string  m_strConSent;		//用于储存要编码正文
	string  m_strConReci;		//用于储存接收的解码后的密文(应和正文一致)

	string	m_strConChar;		//用于储存正文的不同字符
	int  m_arrCharProbability[MaxNum];	//用于储存个字符的出现次数
	list<bool> m_arrCharCode[MaxNum];	//用于储存各个字符的编码
	CBinTreNode<int> *m_arrPoiLeaf[MaxNum];	//用于储存个字符对应叶子节点的指针
	int m_nCharNum;
	
	CBinTreNode<int> *m_arrForest[MaxNum];	//用于储存处理过程中的森林(CbinTree3P<char>自己编的模板库)
	int m_ForestNum;						//森林中树的个数
	list<bool>  m_lisTranCode;		//用于储存最终的编码





/*	vector<int>  m_vecCharNum;	//用于储存个字符的出现次数
	vector<(list<bool>) *>  m_vecCharCode;	//用于储存各个字符的编码
	vector<(CBinTreNode<int>) *> m_vecPoiLeaf;	//用于储存个字符对应叶子节点的指针
	vector<(CBinTreNode<int>) *> m_vecForest;	//用于储存处理过程中的森林(CbinTree3P<char>自己编的模板库)
	vector<bool>  m_vecTranCode;		//用于储存最终的编码
	*/

public:
	void SetContent(const string & strCon){//设置正文
		if(strCon.size() < MaxNum)
			m_strConSent = strCon;
		else reportError("编码过长",8);
	}

	void MergeTree(CBinTreNode<int> * &pPar,CBinTreNode<int> * &pChd1,CBinTreNode<int>  * &pChd2)//用于两个节点并在一个节点下
	{
		pPar = new CBinTreNode<int>;
		pPar->m_pLefC = pChd1;
		pPar->m_pRigC = pChd2;
		pPar->m_MData = pChd1->m_MData + pChd2->m_MData;
		pPar->m_pParent = NULL;
		pChd1->m_pParent = pChd2->m_pParent = pPar;

	}


public:

	void Analyze();	//Void Analyze() 用于通过分析m_strConSent 来得到m_arrCharNum和m_strConChar
					//并建立字符相对应的权值节点,将相应指针赋值给m_arrPChar和m_arrForest
	
	void HaffumEncode(); //分析m_strConReci和m_strConChar 生成m_arrCode和HuffmanTree的哈夫曼树
							//左子树则为0,右子树为1;
	void EncodeForm(); //通过得到的m_arrCode 编码正文最终的到m_vecTranCode
	void Encode(); //调用Analyze(),HaffumEncode(),EncodeForm()得到编码
	void Decode(); //分析m_vecTranCode,m_strConChar和m_vecCharCode得到密文 并储存在m_strConReci中
};

#endif // !defined(AFX_HUFFMANTREE_H__CE26E6BC_1CF3_431E_A709_BE959DB85859__INCLUDED_)

⌨️ 快捷键说明

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