向着曙光前进的博客

新手上路,请大佬笔下留情

利用栈完成后缀表达式的计算

后缀表达式不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则,如:(2 + 1) * 3 , 即2 1 + 3 *。利用栈结构,将后缀表达式的结果计算出来。

输入

后缀表达式。以#号作为表达式结束标志。为了简单,处理的数据为0-9的整数。

输出

计算结果。

样例输入

3 6 6 2 / - 3 * +#

样例输出

12


#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cstdlib>
#include<stack>
using namespace std;
typedef int ElemType;
int main()
{
	stack<int>s;
	char a[1001];
	int n;
	for (n  = 0;; n++)
	{
		scanf("%c", &a[n]);
		if (a[n] == '#')break;
	}
	for (int i  = 0; i < n; i++)
	{
		if (a[i] >= '0'&&a[i] <= '9')
			s.push(a[i] - '0');
		else
		{
			if (a[i] == ' ')continue;
			if (a[i] == '-')
			{
				int b  = s.top();
				s.pop();
				int a  = s.top();
				s.pop();
				int sum  = a  - b;
				s.push(sum);
			}
			if (a[i] == '+')
			{
				int b  = s.top();
				s.pop();
				int a  = s.top();
				s.pop();
				int sum  = a  + b;
				s.push(sum);
			}
			if (a[i] == '/')
			{
				int b  = s.top();
				s.pop();
				int a  = s.top();
				s.pop();
				int sum  = a  / b;
				s.push(sum);
			}
			if (a[i] == '*')
			{
				int b  = s.top();
				s.pop();
				int a  = s.top();
				s.pop();
				int sum  = a * b;
				s.push(sum);
			}
		}
	}
	cout  << s.top();
	s.pop();
	return 0;
}

阅读更多
版权声明:本文为博主原创文章,转载注明出处 https://blog.csdn.net/qq_38271800/article/details/79976961
个人分类: 数据结构 swustoj
上一篇一元多项式加法运算的实现
下一篇双向链表的操作问题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭