C++ 作业(哈夫曼树)
#include<bits/stdc++.h> #define fi first #define se second #define int long long using namespace std; ; map<char,string> mp; map<string,char> pm; struct pos { char x; int num; pos *father=NULL; pos *lson=NULL; pos *rson=NULL; pos *p=NULL; friend bool operator < (pos a, pos b) { return a.num > b.num; //重载小于号使得小的先出队列 } }tree[maxn]; void make_DFS(pos &root,string ss) { if(root.lson==NULL && root.rson==NULL) { //cout<<root.x<<endl; mp[root.x]=ss; pm[ss]=root.x; } else { make_DFS(*root.lson,ss+"); make_DFS(*root.rson,ss+"); } } void build_tree(pos &root) { priority_queue<pos> qu; // pos 结构体 ;i<=;i++) { qu.push(tree[i]); } while(!qu.empty()) { pos *qq; qq=qu.top().p; qu.pop(); pos *pp; pp=qu.top().p; qu.pop(); ) { root.lson=pp; root.rson=qq; break; } (*pp).father=new pos; pos *x=(*pp).father; (*x).lson=pp; (*x).rson=qq; (*x).x='*'; (*x).num=(*pp).num+(*qq).num; //cout<<(*x).num<<endl; (*x).p=&(*x); qu.push(*x); } //cout<<"make tree OK"<<endl; make_DFS(root,""); } int32_t main() { freopen("tree.txt","r",stdin); tree[].x=' '; ;i<=;i++) cin>>tree[i].x; ;i<=;i++) cin>>tree[i].num; ;i<=;i++) tree[i].p=&tree[i]; pos root; build_tree(root); ;i<=;i++) { cout<<tree[i].x<<" "<<tree[i].num<<" "<<mp[tree[i].x]<<" "<<pm[mp[tree[i].x]]<<endl; } ]; getchar();gets(a); cout<<a<<endl; int l=strlen(a); cout<<;i<l;i++)cout<<mp[a[i]];cout<<endl; gets(a); cout<<a<<endl; l=strlen(a); cout<<;i<l;i++)cout<<mp[a[i]];cout<<endl; gets(a); cout<<a<<endl; l=strlen(a); cout<<;i<l;i++)cout<<mp[a[i]];cout<<endl; cout<<"----------------------------------------"<<endl; gets(a); cout<<a<<endl; l=strlen(a); cout<<"译码"<<endl; string ss=""; ;i<l;i++) { ss=ss+a[i]; if(pm[ss]==' '|| (pm[ss]>='A'&&pm[ss]<='Z')) { cout<<pm[ss]; ss=""; } }cout<<endl; gets(a); cout<<a<<endl; l=strlen(a); cout<<"译码"<<endl; ss=""; ;i<l;i++) { ss=ss+a[i]; if(pm[ss]==' '|| (pm[ss]>='A'&&pm[ss]<='Z')) { cout<<pm[ss]; ss=""; } }cout<<endl; gets(a); cout<<a<<endl; l=strlen(a); cout<<"译码"<<endl; ss=""; ;i<l;i++) { ss=ss+a[i]; if(pm[ss]==' '|| (pm[ss]>='A'&&pm[ss]<='Z')) { cout<<pm[ss]; ss=""; } }cout<<endl; }
C++ 作业(哈夫曼树)的更多相关文章
- 【algo&ds】【吐血整理】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、B树、字典树、红黑树、跳表、散列表
本博客内容耗时4天整理,如果需要转载,请注明出处,谢谢. 1.树 1.1树的定义 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结 ...
- (哈夫曼树)HuffmanTree的java实现
参考自:http://blog.csdn.net/jdhanhua/article/details/6621026 哈夫曼树 哈夫曼树(霍夫曼树)又称为最优树. 1.路径和路径长度在一棵树中,从一个结 ...
- 数据结构之C语言实现哈夫曼树
1.基本概念 a.路径和路径长度 若在一棵树中存在着一个结点序列 k1,k2,……,kj, 使得 ki是ki+1 的双亲(1<=i<j),则称此结点序列是从 k1 到 kj 的路径. 从 ...
- C++哈夫曼树编码和译码的实现
一.背景介绍: 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree).哈夫曼树是带权路径长度最短的树,权值较大的 ...
- 数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- 哈夫曼树---POJ3253
http://poj.org/problem?id=3253 这就是 最典型的哈夫曼树的题型,我们就根据这道题学习一下哈夫曼树 这是最开始我们把21据下来之后我们据下8,然后再据下5得到34,可以看出 ...
- 哈夫曼树(三)之 Java详解
前面分别通过C和C++实现了哈夫曼树,本章给出哈夫曼树的java版本. 目录 1. 哈夫曼树的介绍 2. 哈夫曼树的图文解析 3. 哈夫曼树的基本操作 4. 哈夫曼树的完整源码 转载请注明出处:htt ...
- 哈夫曼树(二)之 C++详解
上一章介绍了哈夫曼树的基本概念,并通过C语言实现了哈夫曼树.本章是哈夫曼树的C++实现. 目录 1. 哈夫曼树的介绍 2. 哈夫曼树的图文解析 3. 哈夫曼树的基本操作 4. 哈夫曼树的完整源码 转载 ...
- 哈夫曼树(一)之 C语言详解
本章介绍哈夫曼树.和以往一样,本文会先对哈夫曼树的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可.若 ...
- 51nod 1117 聪明的木匠 (哈夫曼树)
题目:传送门. 题意:中文题. 题解:就是构造一颗哈夫曼树,数据结构里的知识. #include <iostream> #include <cstdio> #include & ...
随机推荐
- day17 面向对象-成员
今日主要学习了: 1 .成员 2. 变量 3. 方法 4.属性 5.私有 1. 成员 在类中你能写的所有内容都是成员 2 .变量 1) 实例变量: 昨天写的就是实例变量 ,由对象去访问的变量 . cl ...
- 非图片格式如何转成lmdb格式--caffe
链接 LMDB is the database of choice when using Caffe with large datasets. This is a tutorial of how to ...
- 程序从sqlserver2008搬家到MySQL5.6
1.数据表结构的搬家 SqlServer的建表sql语句在MySQL中肯定不能运行 这里使用转换工具 下载地址: https://download.csdn.net/download/zhutouai ...
- 每天CSS学习之text-overflow
text-overflow是CSS3的一个属性,其作用是当文本溢出包含它的元素时,应该裁剪还是将多余的字符用省略号来表示. 该属性一般和overflow:hidden属性一起使用. text-over ...
- Java集合排序方法comparable和comparator的总结
一.概述Comparable和Comparator都是用来实现集合中元素的比较.排序的.Comparable是在集合内部定义的方法实现的排序,位于java.lang下.Comparator是在集合外部 ...
- 第三篇 功能实现(2) (Android学习笔记)
第三篇 功能实现(2) ●Activity的四种启动模式 Activity的启动模式有四种,分别是standard.singleTop.singleTask和singleInstance. 在Andr ...
- DevExpress v18.1新版亮点——DevExtreme篇(二)
用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExtreme JavaScript Controls v18.1 的新功能 ...
- jvm的基本结构以及各部分详解(转)
原文链接:https://www.cnblogs.com/zwbg/p/6194470.html 1.java虚拟机的基本结构 图: 1.类加载器子系统从文件系统或者网络中加载Class信息,类信息( ...
- MySQL存储过程错误No data - zero rows fetched, selected, or processed
原因:游标没有获取到任何内容! 解决方案 : 声明一个 continue handler declare continue handler for not found set V_NotFound = ...
- 一个灵活的AssetBundle打包工具
尼尔:机械纪元 上周介绍了Unity项目中的资源配置,今天和大家分享一个AssetBundle打包工具.相信从事Unity开发或多或少都了解过AssetBundle,但简单的接口以及众多的细碎问题 ...