Day10 栈和队列
LeetCode 225. 用队列实现栈【队列】
用队列实现栈就是当输出元素时,就把这个元素之前的元素全部出队再入队,完成后进先出的实现。
只用一个队列也能实现,这里的q2是备用队列。
class MyStack {
private:
queue<int> q1;
queue<int> q2;
public:
MyStack() {
}
void push(int x) {
q1.push(x);
}
int pop() {
int size=q1.size();
size--;
while(size--){
q2.push(q1.front());
q1.pop();
}
int res=q1.front();
q1.pop();
q1=q2;
while(!q2.empty()) q2.pop();
return res;
}
int top() {
return q1.back();
}
bool empty() {
return q1.empty();
}
};
LeetCode 232. 用栈实现队列【栈】
用队列实现栈就是用两次先进后出完成先进先出,一个栈是输入栈,一个栈是输出栈。
这里要注意的是,只要完成的是输出操作,就一定要把输入栈的元素全部转移到输出栈中,否则容易出现顺序错误。
class MyQueue {
public:
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 res=stout.top();
stout.pop();
return res;
}
int peek() {
int res=this->pop();//函数直接调用
stout.push(res);//只查询,再给放回去
return res;
}
bool empty() {
return stin.empty() && stout.empty();
}
};
今天的题比较基础,休息一下。