代码随想录训练营打卡DAY 10 | 栈与队列相互实现
用栈实现队列
注意:必须使用 2 个栈
class MyQueue {
public:
// 用栈实现队列,至少2个栈,反之一个即可
stack<int> stIn;// 输入栈
stack<int> stOut;// 输出栈
MyQueue() {
}
void push(int x) {
stIn.push(x);
}
int pop() {
if(stOut.empty()){
while (!stIn.empty())
{
stOut.push(stIn.top());
stIn.pop();
}
}
int temp = stOut.top();
stOut.pop();
return temp;
}
int peek() {// peek可以复用pop
int temp = this->pop();
// 以下这两种写法是错误的
// this->push(temp);
// stIn.push(temp);
stOut.push(temp);
return temp;
}
bool empty() {
// if(stIn.empty() && stOut.empty()) return true;
// return false;
return stIn.empty() && stOut.empty();
}
};
用队列实现栈
注意:使用 1 个队列也可实现栈
class MyStack {
public:
// 用队列实现栈,一个队列即可实现
queue<int> que;
MyStack() {
}
void push(int x) {
que.push(x);
}
int pop() {
for(int i = 0; i < que.size() - 1; i++){
que.push(que.front());
que.pop();
}
int temp = que.front();
que.pop();
return temp;
}
int top() {
return que.back();
}
bool empty() {
return que.empty();
}
};
参考文档
- https://programmercarl.com/0232.%E7%94%A8%E6%A0%88%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97.html
- https://programmercarl.com/0225.%E7%94%A8%E9%98%9F%E5%88%97%E5%AE%9E%E7%8E%B0%E6%A0%88.html