(最容易的一集,没啥太多注意事项)
Leetcode.225 用队列实现栈:
对于栈,其特点是后进先出。对于队列,其特点是先进先出,例如对于下面图中的栈和队列:
在各自出元素时,栈弹出的元素为,队列弹出的元素是。在本题中,需要利用队列来模拟实现栈的若干功能,分别为:
:将元素压入栈顶。
:移除并返回栈顶元素
:返回栈顶元素
:探空
对于,直接利用队列中的接口向队列中插入元素即可。例如:需要向队列中压入元素
对于,由于需要返回并移除的栈顶元素正是队列中的最后一个,因此,让队列中的前个元素依次插入到最后一个元素后,此时最后一个元素变成了队列中的第一个元素,即:
由于题目需要移除并且返回这个元素,因此先创建一个变量来存储队列中的第一个元素,随后,利用删除这个元素。最后返回即可。
对于,直接利用队列中的接口,返回即可。
对应代码如下:
class MyStack {
public:
queue<int> In;
MyStack() {
}
void push(int x) {
In.push(x);
}
int pop() {
int size = In.size();
size--;
while(size--)
{
In.push(In.front());
In.pop();
}
int result = In.front();
In.pop();
return result;
}
int top() {
return In.back();
}
bool empty() {
return In.empty();
}
};
Leetcode.232 用栈实现队列:
对于本题,需要利用两个栈来模拟实现队列,此处分别命名为,。对于,用于接收元素,并且向中插入元素。对于,用于向外弹出元素。例如对于上题中的队列,如果需要让队列弹出元素,弹出的元素应该为
但是对于栈来说,其弹出的元素为,因此,可以利用上面的方法,创建两个栈,二者之间的关系如下图所示:
令向中弹入元素:
在题目中,要求实现的接口也有四个:
:将元素推至队列末尾
:从队列开头移除并返回元素
:返回队列开头的元素
:探空
对于,依旧直接调用栈中的即可。
对于,首先检查是否为空,如果为空,则让中的元素全部弹入到中。随后依旧创建变量保存栈弹出的元素,随后利用删除栈顶元素。最后返回即可。
对于,可以先复用,同时创建变量用于接收的返回值,将插入到栈中,最后返回即可。对应代码如下:
class MyQueue {
public:
stack<int> In;
stack<int> out;
MyQueue() {
}
void push(int x) {
In.push(x);
}
int pop() {
if(out.empty())
{
while(!In.empty())
{
out.push(In.top());
In.pop();
}
}
int result = out.top();
out.pop();
return result;
}
int peek() {
int result = this->pop();
out.push(result);
return result;
}
bool empty() {
return In.empty() && out.empty();
}
};