双端队列的使用
2018-03-28 10:14
106 查看
蒜头君学习完数据结构之后,发现这种普通的栈已经不能满足自己的需求了。于是蒜头君想自己手动写一个超级栈。超级栈和普通栈不同的是,如果自己想往栈底添加数据的话,可以通过把栈翻转,然后再往栈顶添加数据来完成。听起来是不是觉得这个栈很厉害?对于超级栈的操作有四种:
(1) 11 表示把栈反转
(2) 22 表示把栈顶元素出栈
(3) 3 \ x3 x 表示把 xx 放到栈顶
(4) 44 表示把栈内所有的元素从栈底开始打印出来,如果栈内没有元素,只需要打印空行。
既然你这么厉害,那么蒜头君决定把这个伟大而又艰巨的任务交给了你。
之后 nn 行输入这四种操作。
(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; }
相关文章推荐
- 数据结构——使用双端链表实现队列(java实现)
- STL使用:deque双端队列
- hdu 1702 :ACboy needs your help again!(练习使用双端队列)
- 多线程与双端队列结合使用,实现持久化任务(1)
- 使用双向链表实现双端队列
- python中使用双端队列解决回文问题
- C++ 标准模板库STL 双端队列 deque 使用方法与应用介绍(一)
- UVa210_Concurrency Simulator_双端队列的使用
- 使用数组实现双端队列
- 多线程与双端队列结合使用,实现持久化任务(2)
- 多线程与双端队列结合使用,实现持久化任务(3)
- 消息队列(Message Queue)简介及其使用
- 使用rabbitmq工作队列实现任务的负载分发
- Qt使用 消息队列框架 RabbitMQ
- 消息队列(Message Queue)简介及其使用
- C++ Queues(队列)成员函数及其使用方法
- 双端队列 HDOJ 3530 Subsequence
- 消息队列之使用场景
- 使用双向链表实现队列和栈
- Linux 下开源消息队列系统 RabbitMQ 安装使用