题目链接:Click here~~
题意:
RT。
解题思路:
竟然没一眼秒掉,还是不够自信,不过细想一下还是想出来了,记录一下吧。。。
直接模拟一个过程,应该就能发现如何操作了。设两个栈分别为 s1 和 s2。
举个例子,首先队列 push 了 3 个值 {1,2,3},我们也按照顺序将其 push 到栈 s1 中。
此时如果队列要取 front 了,则需要访问 s1 栈底的元素,但其他元素不能直接扔掉,一会还要留着用,这时就把他们按出栈顺序 {3,2} 扔到栈 s2 中。
而以这个顺序入栈后,对应的出栈顺序正好和出队顺序一致,即 “反反得正”,所以我们不妨保留这个栈,出队时,先考虑这个栈即可。
#include <stdio.h> #include <stack> using std::stack; class MyQueue { private: stack<int> storage,buffer; public: void push(int x) { storage.push(x); } int pop() { if(!buffer.empty()) { int ret = buffer.top(); buffer.pop(); return ret; } else { if(storage.empty()) return -1; while(!storage.empty()) { buffer.push(storage.top()); storage.pop(); } return pop(); } } }q; int main() { int n; scanf("%d",&n); while(n--) { char op[3]; int x; scanf("%s",op); if(op[1] == 'U') { scanf("%d",&x); q.push(x); } else printf("%d\n",q.pop()); } return 0; }