例题-用两个栈实现队列

题目描述

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型

原理

先分析栈和队列的不同,一个是先入后出FILO,一个是先入先出FIFO

我们拥有两个栈,可以让其中一个栈作为队列的入口,负责插入新元素;另一个栈作为队列的出口,负责移除老的元素

使用两个栈A,B,其中假定A负责push操作,B负责pop操作。

实现队列的push操作, 每次进行添加操作,都会相应得对栈A进行添加元素。

实现队列的pop操作,每次进行删除操作,因为栈B负责pop操作,判断B是否为空,不为空则直接出栈,为空时将栈A全部入到栈B中,在进行出栈

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class StackToQueue
{
public:
void push(int node)
{
stack1.push(node);
}
int pop()
{
if (stack2.empty())
{
while (!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
}
int res = stack2.top();
stack2.pop();
return res;
}
private:
stack<int> stack1;
stack<int> stack2;
};