![[jobdu]用两个栈实现队列 [jobdu]用两个栈实现队列](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
思路比较简单。就是当要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\n", Q.pop());
}
}
return 0;
}