题目
在完成《算法》课后题目的过程中,遇到一道题目内容如下:
编写一道程序,从标准输入得到一个缺少左括号的表达式并打印出补全括号之后的中序表达式。例如,给定输入:
1 + 2 ) * 3 - 4 ) * 5 - 6 ) ) )
你的程序应该输出:
((1 + 2) * ((3 - 4) * (5 - 6)))
思路
开始感觉这个题目就有点类似求四则表达式的题目,也就是所谓的双栈法。
双栈法的原理如下:
1. 构造两个Stack,分别用来存储操作符(optrStack)和操作数(dataStack).
2. 遍历表达式,如果是操作数,则入操作数栈;如果是运算符,则比较当前运算符和optrStack栈顶运算符的优先级:当优先级大于栈顶运算符时,则操作符入栈。当优先级小于栈顶运算符时,则运算符出栈,同时dataStack出栈两个操作数,计算结果后再将操作数入栈。
3. 重复2,直到optrStack为空为止。
这个题