- 输入:3+4
通过这个例子可以看出两条规则:
- 当读入一个数字时直接入输出队列
- 当输入结束后,运算符队列中所有操作符入输出队列
输入 | 动作 | 输出 (逆波兰表示法) | 运算符栈 | 提示 |
---|---|---|---|---|
3 | 将符号加入输出队列 | 3 | ||
+ | 将符号压入操作符堆栈 | 3 | + | |
4 | 将符号加入输出队列 | 3 4 | + | |
* | 将符号压入操作符堆栈 | 3 4 | * + | *号的优先级高于+号 |
2 | 将符号加入输出队列 | 3 4 2 | * + | |
/ | 将堆栈中元素弹出,加入输出队列 | 3 4 2 * | + | /号和*号优先级相同 |
将符号压入操作符堆栈 | 3 4 2 * | / + | /号的优先级高于+号 | |
( | 将符号压入操作符堆栈 | 3 4 2 * | ( / + | |
1 | 将符号加入输出队列 | 3 4 2 * 1 | ( / + | |
− | 将符号压入操作符堆栈 | 3 4 2 * 1 | − ( / + | |
5 | 将符号加入输出队列 | 3 4 2 * 1 5 | − ( / + | |
) | 将堆栈中元素弹出,加入输出队列 | 3 4 2 * 1 5 − | ( / + | 循环直到找到(号 |
将堆栈元素弹出 | 3 4 2 * 1 5 − | / + | 括号匹配结束 | |
^ | 将符号压入操作符堆栈 | 3 4 2 * 1 5 − | ^ / + | ^号的优先级高于/号 |
2 | 将符号加入输出队列 | 3 4 2 * 1 5 − 2 | ^ / + | |
^ | 将符号压入操作符堆栈 | 3 4 2 * 1 5 − 2 | ^ ^ / + | ^号为从右至左求值 |
3 | 将符号加入输出队列 | 3 4 2 * 1 5 − 2 3 | ^ ^ / + | |
END | 将栈中所有数据加入输出队列 | 3 4 2 * 1 5 − 2 3 ^ ^ / + |