【栈与队列基础】
https://programmercarl.com/栈与队列理论基础.html
【232. 用栈实现队列】
看到题目的第一想法:需要用到两个栈,来模拟队列的先进先出。
看完代码随想录的想法:
1.重点是理解出队列的操作是如何用两个栈来实现的。
2.只能使用pop from top、push to top 、size、peak、is empty操作
定义两个栈:入栈stackIn和出栈stackOut
stack<int> stIn;
stack<int> stOut;
导入队列的操作:
将元素push到入栈中
stIn.push(x);
从队列中出来的操作:
1.先判断出栈是否为空。
2.为空则先将入栈的元素全部pop到出栈
3.再从出栈pop
if(stOut.empty()){
while(!stIn.empty()){
stOut.push(stIn.top());
stIn.pop();
}
}
int res = stOut.top();
stOut.pop();
return res;
返回队列头元素:
1.直接使用写好的this->pop()
2.注意pop之后还需要再push进去
int res = this->pop();
stOut.push(res);
return res;
判断队列是否为空:
当入栈和出栈都为空的时候,队列就为空了。
return stIn.empty() && stOut.empty();
【225. 用队列实现栈】
重点是用一个队列来实现。
pop的操作是将队列的除了最后进来的元素前面的元素全都一个一个push到队列的末尾。之后再把最后一个元素pop出去就行。
int pop() {
int size = que1.size();
size--;
while(size--){
que1.push(que1.front());
que1.pop();
}
int res = que1.front();
que1.pop();
return res;
}
注意:队列的成员函数是front(),back()