用栈实现计算后缀表达式(0-9数值运算示例)

一、原理

可以先建立一个栈S 。从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压入栈S中 。如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束。

二、代码

int calculate(string s)
{
	int temp1,temp2,temp3;
	int len=s.length();
	stack<int> st;
	for(int i=0;i<len;i++)
	{
		if(s[i]>='0' && s[i]<='9')
		{
			int n=s[i]-48;
			st.push(n);
		}
		else
		{
			temp1=st.top();
			st.pop();
			temp2=st.top();
			st.pop();
			if(s[i]=='+')
			{
				temp3=temp2+temp1;
			}
			else if(s[i]=='-')
			{
				temp3=temp2-temp1;
			}
			else if(s[i]=='*')
			{
				temp3=temp2*temp1;
			}
			else if(s[i]=='/')
			{
				temp3=temp2/temp1;
			}
			st.push(temp3);
		}
	}
	return st.top();
}

猜你喜欢

转载自blog.csdn.net/kupe87826/article/details/114478170