算法与数据结构3.1 stack

★实验任务

一天,小 L 发现了一台支持一下操作的机器:

IN x:将整数 x 入栈

POP:将栈顶元素出栈

ASUB:出栈两个数,将两数差的绝对值入栈

COPY:将栈顶元素(如果有的话)复制一份,入栈

现在小 L 想知道经过给定的 n 次操作之后,栈内所有元素之和是多少。

Notice:这台机器会自动忽略不合法的操作

★数据输入

第一行一个正整数 n,表示有 n 次操作。

接下来有 n 行,每行一个操作。

0<=n<=1000, 0<=x<=1000

★数据输出

输出这台机器在 n 次操作后,栈内所有元素之和。

★样例

输入示例 输出示例
4
IN 10
IN 11
ASUB
COPY
2

★思路

栈的基本操作

只需要注意这台机器会自动忽略不合法的操作

★Code

 
            #include<iostream>
#include<math.h>
#include<stack>
using namespace std;
int main()
{
	int n=0,i=0,temp1=0,temp2=0,temp3=0,temp4=0,sum=0,flag=0;
	char str[5]={0};
	stack<int>s;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>str;
		if(str[0]=='I')
		{
			cin>>temp1;
			s.push(temp1);
			temp1=0;
		}
		else if(str[0]=='P')
		{
			if(s.empty())
			{
				continue;
			}
			else
			{
				s.pop();
			}
		}
		else if(str[0]=='A')
		{
			if(s.size()<2)
			{
				continue;
			}
			else
			{
				temp2=s.top();
				s.pop();
				temp3=s.top();
				s.pop();
				s.push(abs(temp2-temp3));
				temp2=0;
				temp3=0;
			}
		}
		else if(str[0]=='C')
		{
			if(s.empty())
			{
				continue;
			}
			else
			{
				temp4=s.top();
				s.push(temp4);
				temp4=0;
			}
		}
		else
		continue;
	}
	flag=s.size();
	for(i=0;i<flag;i++)
	{
		sum+=s.top();
		s.pop();
	}
	cout<<sum<<endl;
	return 0;
} 
        
原文地址:https://www.cnblogs.com/031602523liu/p/7676272.html