郁闷的C小加(一)

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
 
描述

我们熟悉的表达式如a+b、a+b*(c+d)等都属于中缀表达式。中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2。同理,后缀表达式就是操作符在两个操作数之后:num1 num2 operand。ACM队的“C小加”正在郁闷怎样把一个中缀表达式转换为后缀表达式,现在请你设计一个程序,帮助C小加把中缀表达式转换成后缀表达式。为简化问题,操作数均为个位数,操作符只有+-*/ 和小括号。

 
输入
第一行输入T,表示有T组测试数据(T<10)。
每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个表达式。这个表达式里只包含+-*/与小括号这几种符号。其中小括号可以嵌套使用。数据保证输入的操作数中不会出现负数。并且输入数据不会出现不匹配现象。
输出
每组输出都单独成行,输出转换的后缀表达式。
样例输入
2
1+2
(1+2)*3+4*5
样例输出
12+
12+3*45*+
/**
分析:该题是,将中缀表达式转化为后缀表达式
步骤:
①、遇到数字(digit)直接将数字放入队列
②、遇到小括号 '(' 入栈
③、遇到小括号 ')' 就将 小括号'('以上的所有运算符出栈《并将其放入队列》、最后将 '(' 出栈
④、新输入一个运算符的时候判断,如果新出现的运算符的优先级小于等于栈顶优先级
==> 栈内元素出栈《并将其放入队列》、最后将新出现的运算符入栈
⑤、 将栈内所有的元素出栈 《并将其放入队列》
**/

C/C++代码实现:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <stack>
#include <queue> using namespace std; int priority (char c)
{
if (c == '*' || c == '/') return ;
if (c == '+' || c == '-') return ;
return ;
} int main ()
{
int T;
scanf ("%d", &T);
while (T --)
{
string str;
cin >>str;
int len = str.size ();
stack <char> my_stack_op;
queue <char> my_queue;
my_stack_op.push ('#'); for (int i = ; i < len; ++i)
{
if (str [i] >= '' &&str [i] <= '')
{
my_queue.push (str[i]);
}
else if (str [i] == '(')
{
my_stack_op.push ('(');
}
else if (str [i] == ')')
{
char c = my_stack_op.top();
while (c != '(')
{
my_queue.push (c);
my_stack_op.pop ();
c = my_stack_op.top ();
}
my_stack_op.pop ();
}
else
{
char c = my_stack_op.top ();
while (priority (c) >= priority (str [i]))
{
my_queue.push (c);
my_stack_op.pop ();
c = my_stack_op.top ();
}
my_stack_op.push (str [i]);
}
}
while (!my_stack_op.empty ())
{
my_queue.push (my_stack_op.top());
my_stack_op.pop ();
}
while (!my_queue.empty())
{
if (my_queue.front () != '#')
printf ("%c", my_queue.front());
my_queue.pop();
}
printf ("\n");
}
return ;
}

nyoj 257 郁闷的C小加(一)(栈、队列)的更多相关文章

  1. NYOJ 257 郁闷的C小加(一)

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度: 描写叙述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说) ...

  2. NYOJ 257 郁闷的C小加(一) (字符串处理)

    题目链接 描述 我们熟悉的表达式如a+b.a+b(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说)操作符在两个操作数中间:num1 operand num2.同理,后缀表达式就是操作符 ...

  3. NYOJ 409 郁闷的C小加(三) (字符串处理)

    题目链接 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考"郁闷的C小加(一)"),C小加很高兴.但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值 ...

  4. NYOJ 267 郁闷的C小加(二) (字符串处理)

    题目链接 描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考"郁闷的C小加(一)"),C小加很高兴.但C小加是个爱思考的人,他又想通过这种方法计算一个表达式的值 ...

  5. nyoj 409——郁闷的C小加(三)——————【中缀式化前缀后缀并求值】

    郁闷的C小加(三) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很 ...

  6. NYOJ-267 郁闷的C小加(二)

    郁闷的C小加(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 聪明的你帮助C小加解决了中缀表达式到后缀表达式的转换(详情请参考“郁闷的C小加(一)”),C小加很 ...

  7. nyoj-257 郁闷的C小加(一) 前缀表达式变后缀

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

  8. 郁闷的C小加(一)(后缀表达式)

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

  9. nyoj 236 心急的C小加

    心急的C小加 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的 ...

随机推荐

  1. 安装docker 在centos中

    http://www.imooc.com/article/16448 http://blog.csdn.net/jeffleo/article/details/70904368

  2. opencv::形态学操作

    形态学操作 开操作- open 闭操作- close 形态学梯度- Morphological Gradient 顶帽 – top hat 黑帽 – black hat 开操作- open 先腐蚀后膨 ...

  3. OpenGL glMatrixMode() 函数解释与例子

    概述 glMatrixMode() 用以指定当前要操作的矩阵,可选值有 GL_MODELVIEW(模型视图,默认值),GL_PROJECTION(投影),GL_TEXTURE(纹理),GL_COLOR ...

  4. centos7将本地的镜像挂载做yum源

    首先将镜像挂载上来(用的是VNware),mount命令可以看到自动挂载的位置. mount可以看到挂载在/dev/sr0 这个位置. 接着来新建另一个挂载点:mkdir /iso mount /de ...

  5. 分享一次大厂的技术面试通过,却因学历被拒发 offer 的悲惨经历

    概述 今天心情很down,快周末了,说点不开心的事情给大家开心一下,上周面试心仪已久的大厂,技术面很顺利的通过一面/二面/三面,最后到HR面也很顺利,然后被问到学历(自考本科)后,HR 语气发生一些转 ...

  6. 基于 HTML5 + WebGL 实现 3D 可视化地铁系统

    前言 工业互联网,物联网,可视化等名词在我们现在信息化的大背景下已经是耳熟能详,日常生活的交通,出行,吃穿等可能都可以用信息化的方式来为我们表达,在传统的可视化监控领域,一般都是基于 Web SCAD ...

  7. Java 基本数据类型的取值范围

    基本数据类型,字节数,位数,最大值和最小值. 1. 基本类型:short 二进制位数:16 包装类:java.lang.Short 最小值:Short.MIN_VALUE=-32768 (-2的15此 ...

  8. Python监控SQL Server数据库服务器磁盘使用情况

    本篇博客总结一下Python采集SQL Server数据库服务器的磁盘使用信息,其实这里也是根据需求不断推进演化的一个历程,我们监控服务器的磁盘走了大概这样一个历程: 1:使用SQL Server作业 ...

  9. C语言作业007

    问题 答案 这个作业属于那个课程 C语言程序设计1 这个作业要求在哪里 我在这个课程的目的是 学习并掌握C语言 这个作业在那个具体方面帮助我实现目标 参考文献 四 作业格式 1PTA作业贴图 1.1题 ...

  10. Kong03-Nginx、OpenResty、Kong 的基本概念和区别联系

    Nginx.OpenRestry.Kong 这三个项目关系比较紧密: Nginx 是模块化设计的反向代理软件,C语言开发: OpenResty 是以 Nginx 为核心的 Web 开发平台,可以解析执 ...