讲一下原理吧
1。先准备两个stack,一个放运算数,一个放运算符。
2。遍历表达式,遇到数字,把数字压栈,
3。遇到运算符,
3。1。如果该运算符比栈顶的优先高,则把该运算符压栈,
3。2。否则就把取出运算符栈顶的运算符和两个运算数栈顶的运算数进行运算,把结果放入数字栈顶,再依次比较当前运算符和运算符栈顶的优先级,直到遇到3。1。的情况或者运算符栈为空。
4。遍历运算式结束后,依次取出运算符栈顶的运算符和两个运算数栈顶的运算数进行运算,把结果放入数字栈顶,直到最后如果运算符为空,运算数栈只有一个数字,则取出数字,就是表达的结果,否则为表达式错误。
1。先准备两个stack,一个放运算数,一个放运算符。
2。遍历表达式,遇到数字,把数字压栈,
3。遇到运算符,
3。1。如果该运算符比栈顶的优先高,则把该运算符压栈,
3。2。否则就把取出运算符栈顶的运算符和两个运算数栈顶的运算数进行运算,把结果放入数字栈顶,再依次比较当前运算符和运算符栈顶的优先级,直到遇到3。1。的情况或者运算符栈为空。
4。遍历运算式结束后,依次取出运算符栈顶的运算符和两个运算数栈顶的运算数进行运算,把结果放入数字栈顶,直到最后如果运算符为空,运算数栈只有一个数字,则取出数字,就是表达的结果,否则为表达式错误。
学习
1。如何新增两个stack?
2。如何遍历表达式
3。如何压栈取栈
左括号和有括号的优先级一样吗?
> 退栈并将运算结果入栈
= 脱括弧并接受下一字符
N/A 非法
当前运算符 + - * / ( ) + > > < < < >
栈
- > > < < < > * > > > > < >
顶
/ > > > > < >
( < < < < < = ) > > > > N/A >