数据结构实验之栈与队列二:一般算术表达式转换成后缀式
Description
对于一个基于二元运算符的算术表达式,转换为对应的后缀式,并输出之。
Input
输入一个算术表达式,以‘#’字符作为结束标志。
Output
输出该表达式转换所得到的后缀式。
Sample
Input
ab+(c-d/e)f#
Output
abcde/-f+
1.关于字母的输出:不管是一般(前缀)式还是后缀式,关于字符的输入输出顺序都是一样的,当遇见字母时我们可以直接输出
2.关于运算字符的输出:先进行运算的字符要先输出,当一个运算符遇见比它优先级小的运算符时,就可以确定输出了。这里,我们用一个专门的数组来存还不能判断输出的运算符,也就是还没有遇见优先级比它还小的运算符。
运算符的优先级规则:
(1)括号优先
(2)%,/,*运算优先级相同,-,+运算优先级相同,且前者优先级更高。
(3)同优先级的运算,先存入先运算
我们始终要保证数组里存的运算符的优先级是依次升高的。
再根据代码来理解一下吧
#include <bits/stdc++.h>
using namespace std;
int f(char a, char b) //判断字符a,b的优先级,如果a比b的优先级低,返回 1,否则返回0
{
if (b == '(') return 1; //左括号优先级最高,
if ((a == '/' || a == '*' || a == '%')