描述
一个四则运算算术表达式,只包含“(”,“)”,“+”,“-”,“*”,“/”,括号可嵌套,利用有向无环图的邻接表达式存储,每个操作数原子都由一个小写字母表示。写一个算法输出其逆波兰表达式(又称后缀表达式)。
输入
输入长度不超过100的四则运算表达式,中间没有空格,以’#’结尾。
输出
输出表达式对应的逆波兰表达式
输入样例
(a+b)*c
输出样例
ab+c*
本题本来是用栈解的,但是作为一个表达式,显然树状更符合大家的逻辑认知,就是运算符是父节点,数据是左右孩子,于是想了很久想出了这种有向无环图(也就相当于树)的表达形式
基本思路如下:
先扫描整个字符串,给运算符赋一个优先级,基础优先级先设为0,从左往右扫,如果是加减的话其优先级就在基础优先级上1,乘除的话加2,左括号的话基础优先级加2,右括号的话基础优先级减2。
然后从右往左扫,以第一个优先级最低的运算符作为中点