为了便于处理表达式,常常将普通表达式(称为中缀表示)转换为后缀{运算符在后,如 X/Y 写为 XY/ 表达式。在这样的表示中可以不用括号即可确定求值的顺序,如:(P+Q)*(R-S) → PQ+RS-*。后缀表达式的处理过程如下:扫描后缀表达式,凡遇操作数则将之压进堆栈,遇运算符则从堆栈中弹出两个操作数进行该运算,将运算结果压栈,然后继续扫描,直到后缀表达式被扫描完毕为止,此时栈底元素即为该后缀表达式的值。
输入一个中缀表达式,编程输出其后缀表达式,要求输出的后缀表达式的运算次序与输入的中缀表达式的运算次序相一致。为简单起见,假设输入的中缀表达式由+(加)、-(减)、×(乘)、/(除)四个运算符号以及左右圆括号和英文字母、数字组成(如果是数字,保证数字一定是一位数),其中算术运算符遵守先乘除后加减的运算规则。假设输入的中缀表达式长度不超过 200 个字符,且都是正确的,即没有语法错误,并且凡出现括号其内部一定有表达式,即内部至少有一个运算符号。
只有一行,为中缀表达式
只有一行,为转换后的后缀表达式
X+A*(Y-B)-Z/F
XAYB-*+ZF/-
2+((A+B)*2-C)*d+3
2AB+2*C-d*+3+
容器 stack