郁闷的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. 单调队列与DP

    算是一个总结吧! 先来一个模板: TYVJ 1305 最大子序和 题目描述 输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大. 例如 1,-3,5,1,-2,3 当m ...

  2. [BZOJ1833][ZJOI2010]数字计数

    Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output 输出文 ...

  3. win10系统 plsql developer启动慢

    win10系统plsql启动慢一般原因是plsql打印设置的问题,若默认打印机设置为网络上某一位置的打印机,则plsql启动时会去寻找该打印机,导致启动很慢. 解决办法1 直接禁止print spoo ...

  4. 非阻塞IO模型

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> # ...

  5. vue使用 封装websocket心跳包

    ---恢复内容开始--- 这套代码可以拿过去直接用 一些注意我会在下面代码中加上注释: 谢谢支持 核心代码 //这里需要引入vuex import store from './store'; let ...

  6. Joomla3.4.6 RCE漏洞深度分析

    笔者<Qftm>原文发布:https://www.freebuf.com/vuls/216512.html *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径 0×00 背景 10月9 ...

  7. c#菜单动态合并

    说明 在程序中经常使用弹出菜单,并且一个窗体中可以存在多个弹出菜单.开发过MDI窗体的读者可能都知道,当MDI子窗体最大化时,子窗体和主窗体的菜单能够自动的合并.这是如何实现的呢?本例实现了将两个弹出 ...

  8. Java NIO之Java中的IO分类

    前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了 ...

  9. 百万年薪python之路 -- python的历史

    1.python的历史 ​ 2004 Django框架诞生了 ​ python2: ​ 源码不统一,有重复的功能代码 ​ python3: ​ 源码统一,没有重复的功能 2.python是一个什么编程 ...

  10. Ubuntu18.04 安装PGSQL

    关系数据库管理系统是许多网站和应用程序的关键组成部分.它们提供了一种结构化的方式来存储,组织和访问信息. PostgreSQL或Postgres是一个关系数据库管理系统,提供SQL查询语言的实现.它是 ...