首先我们来看一下栈和队列的区别和联系。栈是一种后入先出的数据结构,队列是一种先入先出的数据结构。相同点是栈和队列都是属于线性表。通常来说有两种方法实现。
一种是用两个栈实现队列。这里附上leetcode第232题链接。
力扣https://leetcode-cn.com/problems/implement-queue-using-stacks/用两个栈实现队列的核心操作是:定义两个栈,一个输入栈inStack,一个输出栈outStack.然后当输入栈inStack非空时,将输入栈中的元素值弹入到输出栈中,再将此元素弹出输入栈。
下面是C++代码实现:
class MyQueue {
private:
stack<int> in,out;
void core()
{
while(!in.empty())
{
out.push(in.top());
in.pop();
}
}
public:
MyQueue() {}
void push(int x) {
in.push(x);
}
int pop() {
if(out.empty())
{
core();
}
int x=out.top();
out.pop();
return x;
}
int peek() {
if(out.empty())
{
core();
}
return out.top();
}
bool empty() {
return in.empty()&&out.empty();
}
};
解释:队列通常有四种基本操作,push(),pop(),peek(),empty()。需要注意的是,这里的弹出操作有三步。第一步,当输出栈为空时,只要输入栈非空,就把输入栈里的元素值弹入到输出栈里,第二步把输入栈里的该元素弹出,第三步把输出栈里的栈顶元素弹出。empty操作需要注意的是两个栈都要是空。
结果如下。