計蒜客 程式設計:超級棧
阿新 • • 發佈:2018-12-18
蒜頭君學習完資料結構之後,發現這種普通的棧已經不能滿足自己的需求了。於是蒜頭君想自己手動寫一個超級棧。超級棧和普通棧不同的是,如果自己想往棧底新增資料的話,可以通過把棧翻轉,然後再往棧頂新增資料來完成。聽起來是不是覺得這個棧很厲害?
對於超級棧的操作有四種:
(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; }