思路比较简单。就是当要pop的时候,如果s2为空,才把s1的转过来。总之就是区分一下此时s2为空和非空的情况。 http://ac.jobdu.com/problem.php?pid=1512
#include <cstring> #include <cstdio> #include <stack> using namespace std; class Queue { public: void push(int val) { s1.push(val); } int pop() { if (s2.empty()) { while(!s1.empty()) { int tmp = s1.top(); s1.pop(); s2.push(tmp); } } if (!s2.empty()) { int tmp = s2.top(); s2.pop(); return tmp; } else { return -1; } } private: stack<int> s1, s2; }; int main() { Queue Q; int n; scanf("%d", &n); char flag[20]; int val; for (int i=0; i<n; ++i) { scanf("%s", flag); if (strcmp("PUSH", flag) == 0) { scanf("%d", &val); Q.push(val); } else if (strcmp("POP", flag) == 0) { printf("%d ", Q.pop()); } } return 0; }