- Implement Queue using Stacks
https://leetcode.cn/problems/implement-queue-using-stacks/
class MyQueue {
public:
stack<int>s1;
stack<int>s2;
MyQueue() {
}
void push(int x) {
while (!s1.empty()) {
s2.push(s1.top());
s1.pop();
}
s1.push(x);
while (!s2.empty()) {
s1.push(s2.top());
s2.pop();
}
}
int pop() {
int val = s1.top();
s1.pop();
return val;
}
int peek() {
return s1.top();
}
bool empty() {
return s1.empty();
}
};
- Implement Stack using Queues
https://leetcode.cn/problems/implement-stack-using-queues/
class MyStack {
public:
queue<int>q1;
queue<int>q2;
MyStack() {
}
void push(int x) {
while (!q1.empty()) {
q2.push(q1.front());
q1.pop();
}
q1.push(x);
while (!q2.empty()) {
q1.push(q2.front());
q2.pop();
}
}
int pop() {
int val = q1.front();
q1.pop();
return val;
}
int top() {
return q1.front();
}
bool empty() {
return q1.empty();
}
};
一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时再去弹出元素就是栈的顺序
class MyStack {
public:
queue<int>q;
MyStack() {
}
void push(int x) {
q.push(x);
}
int pop() {
int size = q.size();
size--;
while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部
q.push(q.front());
q.pop();
}
int result = q.front(); // 此时弹出的元素顺序就是栈的顺序了
q.pop();
return result;
}
int top() {
return q.back();
}
bool empty() {
return q.empty();
}
};