📄 huffmantree.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 + -