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 & ...
随机推荐
- U深度U盘启动盘制作教程
① 下载u深度u盘启动盘制作工具 ② 一个能够正常使用的u盘(容量大小建议在4g以上) 第一步:安装u深度u盘启动盘制作工具 双击打开已下载好的安装包,点击窗口中立即安装即可: 等待安装完成后,可以点 ...
- 删除所有已经停止的容器 docker rm $(docker ps -a -q)
杀死所有正在运行的容器docker kill $(docker ps -a -q) 删除所有已经停止的容器docker rm $(docker ps -a -q) 删除所有未打 dangling 标签 ...
- ROS tab键补全操作出现错误
ros tab键补全操作出现错误如下: $ roslaunch sp[rospack] Warning: error while crawling /home/hemudu: boost::files ...
- 5.7 C++函数调用操作符重载
参考:http://www.weixueyuan.net/view/6385.html 总结: 需要以类成员函数的形式对函数调用操作符“()”进行重载. 只有常成员函数才能处理常对象,故我们依然在类中 ...
- CPU使用率过高分析方法
项目过程中发现,应用服务器经常会出现CPU使用率较高的情况,需要定位出具体代码问题. 1.用top命令,根据CPU使用率排序,找出消耗cpu最高的进程 2.找出该进程下消耗CPU最高的线程(命令:to ...
- DevExpress v18.1新版亮点——Data Access篇
用户界面套包DevExpress v18.1日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress Data Access v18.1 的新功能,快来下载试用新版本 ...
- 软件工程项目程序:WC
1:代码来源:http://yuncode.net/code/c_5087c8e4cd77190 2:Platform:Eclipse Language:Java 3:Bug:暂时没有 4. Func ...
- 漫步Java------初识java
一. Java语言概述 语言:是人与人之间用于沟通的一种方式. 例如:中国人与中国人用普通话沟通.而中国人要和英国人交流,就要学习英语. 计算机语言(编程语言): 人与计算机交流的方式.如果人要与计算 ...
- freeswitch笔记
freeswitch知识点:播放录音命令:originate user/1000 &playback(/tmp/123.wav)查看当前注册用户命令:sofia status profile ...
- SpringBoot 添加fastjson
1.先在项目中添加fastjson依赖: <dependency> <groupId>com.alibaba</groupId> <artifactId> ...