后缀表达式(逆波兰式)
定义
逆波兰式,也叫后缀表达式(将运算符写在操作数之后)。逆波兰式在计算机看来是比较简单易懂的结构。逆波兰式能够很好地适应计算机普遍采用的栈式内存结构。
例如:
(3 + 4) * 5 - 6
可以写作:
3 4 + 5 * 6 -
求解思路
建立一个栈S 。从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压入栈S中 。如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束。
具体代码(C)
#include<stdio.h> #include<stack> using namespace std; int main() { stack<char> sk; char str[20]; gets(str); for(int i = 0;str[i];i++) { if(str[i] <= '9'&&str[i] >= '0') { sk.push((str[i])); } else { int y = sk.top() - '0'; sk.pop(); int x = sk.top() - '0'; sk.pop(); int z = 0; if(str[i] == '+') { z = x + y; } else if(str[i] == '-') { z = x - y; } else if(str[i] == '*') { z = x*y; } else { z = x/y; } sk.push(z + '0'); } } printf("%d",sk.top() - '0'); return 0; }
运行结果
输入3 4 + 5 * 6 -