OJ - 中缀表达式转后缀表达式
题目难度:简单
OJ链接:中缀表达式转后缀表达式_牛客网 (nowcoder.com)
将中缀表达式转为后缀表达式(逆波兰表达式),输入 a+b*c/d-a+f/b
输出 abc*d/+a-fb/+
要求:语言不限;输入输出均为单个字符串;操作数用单个小写字母表示,操作符只需支持 ±*/,按照四则运算顺序确定优先级,不包含括号。
示例:
输入:a+b*c/d-a+f/b
输出:abc*d/+a-fb/+ // 操作符跟在它要运算的操作数的后面,按优先级排列
解题思路
不包含括号的中缀转后缀 - 算法思路:比如:1 + 2 * 3
-
定义栈 st
-
遍历中缀表达式:
-
遇到操作数,直接输出(存储),作为后缀表达式的一部分。
-
遇到操作符 s,入栈前先判断下:
如果栈不为空,且 s 的优先级 低于或等于 栈顶操作符的优先级,则先将栈顶的操作符出栈(重复此步骤,继续与栈顶的操作符比较,直到栈为空,或者 s 的优先级 高于 栈顶的操作符,才停止比较)
然后再将当前操作符 s 入栈。
-
-
遍历结束后,依次弹出栈中剩余的所有操作符,得到后缀表达式。
代码如下:不包含括号的中缀转后缀
#include<iostream>
#include<string>
#include<stack>
using namespace std;
// 判断优先级(s1是否高于s2)
bool Priority(char s1, char s2)
{
if (s1 == '*' || s1 == '/')
if (s2 == '+' || s2 == '-') return true;
return false;
}
int main