题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
解题思路
栈:先进后出
队列:先进先出
具体地,假如元素 1, 2, 3, …, k 依次进入队列,当队列进行 pop 操作时,1, 2, 3, …, k 也会依次移出队列。
而如果是栈的情况,假如元素 1, 2, 3, …, k 依次压入栈,当栈进行 pop 操作时,k, k-1, k-2, …, 1 会依次弹出栈。
思考:如果类似于,我们有两个杯子,我们先拿一个杯子从水龙头接水,之后将水倾倒到另一个被子里头,最后再将水倒掉;我们先将元素依次压入一个堆栈,再将这个堆栈的元素依次弹出并按照弹出顺序依次压入另一个堆栈,最后将另一个个堆栈的元素依次弹出,现在弹出的元素的顺序,是不是就和进入队列直接从队列中移出的顺序一样了呢?
技术
C++ stack 的用法
c++ stl栈stack的成员函数介绍
操作 比较和分配堆栈
empty() 堆栈为空则返回真
pop() 移除栈顶元素
push() 在栈顶增加元素
size() 返回栈中元素数目
top() 返回栈顶元素
实现
class Solution
{
public:
void push(int node) {
// 1 将stack2的元素倒入stack1
while(!stack2.empty()){
int stackTopElem;
stackTopElem = stack2.top();
stack2.pop();
stack1.push(stackTopElem);
}
// 2 将node压入stack1
stack1.push(node);
// 3 将stack1的元素倒回stack2
while(!stack1.empty()){
int stackTopElem;
stackTopElem = stack1.top();
stack1.pop();
stack2.push(stackTopElem);
}
}
int pop() {
int stackTopElem;
stackTopElem = stack2.top();
stack2.pop();
return stackTopElem;
}
private:
stack<int> stack1;
stack<int> stack2;
};
结果
运行时间:4ms
占用内存:468k