2:栈的基本操作
- 总时间限制:
- 1000ms
- 内存限制:
- 1000kB
- 描述
-
栈是一种重要的数据结构,它具有push k和pop操作。push k是将数字k加入到栈中,pop则是从栈中取一个数出来。
-
栈是后进先出的:把栈也看成横向的一个通道,则push k是将k放到栈的最右边,而pop也是从栈的最右边取出一个数。
假设栈当前从左至右含有1和2两个数,则执行push 5和pop操作示例图如下:
push 5 pop
栈 1 2 -------> 1 2 5 ------> 1 2
现在,假设栈是空的。给定一系列push k和pop操作之后,输出栈中存储的数字。若栈已经空了,仍然接收到pop操作,
则输出error。
-
- 输入
-
第一行为m,表示有m组测试输入,m<100。
每组第一行为n,表示下列有n行push k或pop操作。(n<150)
接下来n行,每行是push k或者pop,其中k是一个整数。
(输入保证同时在栈中的数不会超过100个) - 输出
- 对每组测试数据输出一行。该行内容在正常情况下,是栈中从左到右存储的数字,数字直接以一个空格分隔,如果栈空,则不作输出;但若操作过程中出现栈已空仍然收到pop,则输出error。
- 样例输入
-
2
4
push 1
push 3
pop
push 5
1
pop - 样例输出
-
1 5
error -
#include<stdio.h>
#include<stack>
#include<math.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
stack<int >q;
stack<int >q1;
int main()
{
int n,m;
char a[1000];
scanf("%d",&n);
while(n--)
{
int f=0;
int f1=0;
int g=0;
scanf("%d",&m);
while(m--)
{
int t;
scanf("%s",a);
if(strcmp(a,"push")==0)
{
scanf("%d",&t);
if(g==0)
{
q.push(t);
f++;
}
}
if(strcmp(a,"pop")==0)
{
if(f==0)
{
g=1;
}
else
{
if(g!=1)
{
q.pop();
f--;
}
}
}
}
if(g==1)
printf("error\n");
else
{
if(f==0)
continue;
else
{
while(!q.empty())
{
q1.push(q.top());
q.pop();
}
while(!q1.empty())
{
if(f1==0)
{
printf("%d",q1.top());
f1=1;
}
else
printf(" %d",q1.top());
q1.pop();
}
printf("\n");
}
}
}
return 0;
}