232.用栈实现队列
使用两个栈,一个输入栈,一个输出栈
- push数据的时候,把数据放进输入栈
- pop的时候,输出栈如果为空,就把输入栈数据全部导入进来,再从输出栈弹出数据;如果输出栈不为空,则直接从出栈弹出数据就可以了。
- peek复用了pop函数
- 如果输入栈和输出栈都为空,说明模拟队列为空
class MyQueue {
public:
stack<int>stkIn;
stack<int>stkOut;
MyQueue() {
}
void push(int x) {
stkIn.push(x);
}
int pop() {
if(stkOut.empty()){
while(!stkIn.empty()){
stkOut.push(stkIn.top());
stkIn.pop();
}
}
int x = stkOut.top();
stkOut.pop();
return x;
}
int peek() {
int x = this->pop();
stkOut.push(x);
return x;
}
bool empty() {
return stkIn.empty() && stkOut.empty();
}
};
225. 用队列实现栈
一个队列在模拟栈弹出元素的时候只要将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部,此时在去弹出元素就是栈的顺序了。
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 res = q.front();
q.pop();
return res;
}
int top() {
return q.back();
}
bool empty() {
return q.empty();
}
};