0%

用两个栈实现队列

栈是一种LIFO的数据结构,队列是一种FIFO的数据机构。牛客网

题目:

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

解题思路

使用一个栈用来入队列,一个栈用来出队列。栈是LIFO的数据结构。

此处使用stack1作为入队列的栈,stack2作为出队列的栈。每一次操作后保证两个栈至少有一个为空。两个栈交换数据后从栈底到栈顶的数据顺序刚好相反。因此可以通过两个栈实现队列的pop和push操作。

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
26
27
28
29
30
class Solution
{
public:
void push(int node) {
if (stack1.empty()) {
while (!stack2.empty()) {
stack1.push(stack2.top());
stack2.pop();
}
}
stack1.push(node);
}

int pop() {
if (stack2.empty()) {
while (!stack1.empty()) {
stack2.push(stack1.top());
stack1.pop();
}
}
int t = stack2.top();
stack2.pop();
return t;
}

private:
// stack1用来入,stack2用来出,出的时候stack1全部弹出并入stack2,然后弹出顶,然后再次全部入stack1
stack<int> stack1;
stack<int> stack2;
};
请作者喝咖啡