蒜头君学习完数据结构之后,发现这种普通的栈已经不能满足自己的需求了。于是蒜头君想自己手动写一个超级栈。超级栈和普通栈不同的是,如果自己想往栈底添加数据的话,可以通过把栈翻转,然后再往栈顶添加数据来完成。听起来是不是觉得这个栈很厉害?
对于超级栈的操作有四种:
(1) 11 表示把栈反转
(2) 22 表示把栈顶元素出栈
(3) 3 \ x3 x 表示把 xx 放到栈顶
(4) 44 表示把栈内所有的元素从栈底开始打印出来,如果栈内没有元素,只需要打印空行。
既然你这么厉害,那么蒜头君决定把这个伟大而又艰巨的任务交给了你。
输入格式
第一行输入一个整数 nn (1 \le n \le 10000)(1≤n≤10000),表示操作次数。
之后 nn 行输入这四种操作。
输出格式
完成上述的操作(题目保证所有的数据都是合法的,不会出现空栈pop
)。
样例输入
7 3 2 3 1 1 3 3 4 2 4
样例输出
1 2 3 1 2
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
deque<int>q;
bool flag=true;
int main()
{
int n,op;
cin>>n;
while(n--)
{
cin>>op;
if(op==1)
{
flag^=1;
}
else if(op==2)
{
if(flag)
q.pop_back();
else
q.pop_front();
}
else if(op==3)
{
int x;
cin>>x;
if(flag)
q.push_back(x);
else
q.push_front(x);
}
else if(op==4)
{
if(flag)
{
if(q.size())
{
cout<<q[0];
for(int i=1;i<q.size();++i)
cout<<' '<<q[i];
}
cout<<endl;
}
else
{
if(q.size())
{
int sz=q.size();
cout<<q[sz-1];
for(int i=sz-2;i>=0;i--)
cout<<' '<<q[i];
}
cout<<endl;
}
}
}
return 0;
}
#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
deque<int>q;
int flag=1;
int main()
{
int n,op;
cin>>n;
while(n--)
{
cin>>op;
if(op==1)
{
flag++;
}
else if(op==2)
{
if(flag%2==0)
q.pop_back();
else
q.pop_front();
}
else if(op==3)
{
int x;
cin>>x;
if(flag%2==0)
q.push_back(x);
else
q.push_front(x);
}
else if(op==4)
{
if(flag%2==0)
{
if(q.size())
{
cout<<q[0];
for(int i=1;i<q.size();++i)
cout<<' '<<q[i];
}
cout<<endl;
}
else
{
if(q.size())
{
int sz=q.size();
cout<<q[sz-1];
for(int i=sz-2;i>=0;i--)
cout<<' '<<q[i];
}
cout<<endl;
}
}
}
return 0;
}