静态网页有哪些网站,云典wordpress,重点培育学科建设网站,软件公司简介模板100字程序示例精选 哈夫曼编码实现文件的压缩和解压 如需安装运行环境或远程调试#xff0c;见文章底部个人QQ名片#xff0c;由专业技术人员远程协助#xff01; 前言
这篇博客针对《哈夫曼编码实现文件的压缩和解压》编写代码#xff0c;代码整洁#xff0c;规则#xff0… 程序示例精选 哈夫曼编码实现文件的压缩和解压 如需安装运行环境或远程调试见文章底部个人QQ名片由专业技术人员远程协助 前言
这篇博客针对《哈夫曼编码实现文件的压缩和解压》编写代码代码整洁规则易读。 学习与应用推荐首选。 运行结果 文章目录
一、所需工具软件 二、使用步骤 1. 主要代码 2. 运行结果 三、在线协助
一、所需工具软件 1. VS2019, Qt 2. C
二、使用步骤
代码如下示例 #includeiostream
#include fstream
#includemap
#includequeue
#include string
using namespace std;
// 二叉树结点
struct HuffmanNode {HuffmanNode* lChild nullptr; //左孩子,一定要初始化否则就会出很麻烦的问题。HuffmanNode* rChild nullptr; //右孩子char Data #; //存储的字符int Weight; //构建结点的时候存储权重即频率HuffmanNode(char Data, int Weight) {this-Data Data;this-Weight Weight;}HuffmanNode() {};
};
// 自定义HuffmanNode比较函数
struct HuffmanNodeCompareWeightGreater
{bool operator() (const HuffmanNode *a, const HuffmanNode *b){return a-Weight b-Weight; // 小顶堆}
};class HuffmanTree {HuffmanNode* root;map char, string HuffmanMap; //存储了对应字符和编码的map解压的时候用与对照还原。map char, int OriginMap; //用于构建哈夫曼树之前统计频率所用存储的是字符和对应的频率//字符频率统计,并存入最初的字符-编码map中void GiveWeight(char str);//构建哈夫曼树,void CreateHuffmanTree();//文件读取并统计字符和频率以此来构建OriginMapvoid ReadFile();//遍历哈夫曼树所得到的字符以及编码得到新的映射以字符串s形式存储处理后的Huffman编码void DisplayHuffmanTree(HuffmanNode* Temp, string s);//Pre为先序遍历用来检验生成的树是否正确void Pre(HuffmanNode* p);
public:HuffmanTree() {root new HuffmanNode();}//文件压缩并写入对应着源文件和HuffmanMap中的编码一个一个的输出到新的文件void ZIP();//文件解压void UNZIP();};//构建哈夫曼树,
void HuffmanTree::CreateHuffmanTree() {//遍历原始的map并根据其键值对逐一构建结点priority_queueHuffmanNode*, vectorHuffmanNode*, HuffmanNodeCompareWeightGreater HuffmanQueue;mapchar, int::iterator it OriginMap.begin();while (it ! OriginMap.end()) {//这个每循环一次就取出一组键和值char ch it-first;int frequency it-second;HuffmanNode *temp new HuffmanNode(ch, frequency); //构建结点,ch即为每个节点存储的字符int main() {HuffmanTree hfTree;hfTree.ZIP();hfTree.UNZIP();
}
运行结果 三、在线协助
如需安装运行环境或远程调试见文章底部个人 QQ 名片由专业技术人员远程协助 1远程安装运行环境代码调试 2Visual Studio, Qt, C, Python编程语言入门指导 3界面美化 4软件制作 当前文章连接https://blog.csdn.net/alicema1111/article/details/132666851 个人博客主页https://blog.csdn.net/alicema1111?typeblog 博主所有文章点这里https://blog.csdn.net/alicema1111?typeblog