数据结构栈之计算后缀表达式

对于一个给定的后缀表达式,(如果它是合法的)

注意:次算法是基于基本操作符是2元操作符且操作数为一位正整数!

其求值的基本思想是:对于给定的表达式进行遍历,假设遇到的是操作数就将其压入栈;假设遇到的是操作符,将栈顶的两个元素弹出,假设栈顶两个元素依次为a,b(a在上b在下),将次操作符应用于这两个栈顶元素,比方b-a(注意b在左a在右)然后将计算结果压入栈(用来充当下一个操作符的操作数);

 最后输出栈顶元素即为结果(事实上假设表达式合法终于栈里面一定会仅仅有一个元素)

 

#include <stdio.h> //后缀表达式求值
#include <iostream>
#include <cstring>
#include <stack>
#include <ctype.h>
#include <algorithm>
using namespace std;
int main()
{
	char c;
	stack <int> s;
	while(scanf("%c",&c)!=EOF)
	{
		if(c=='#')break;
		if(isdigit(c))
			s.push(c-'0');
		else
		{
			int a=s.top();
			s.pop();
			int b=s.top();
			s.pop();
			switch(c)
			{
				case '+':s.push(b+a);break;
				case '-':s.push(b-a);break;
				case '*':s.push(b*a);break;
				case '/':s.push(b/a);break;
			}
		}
	}
	cout<<s.top()<<endl;
	return 0;
}

 

原文地址:https://www.cnblogs.com/zhchoutai/p/6914247.html