剑指offer-----5、用两个栈来实现一个队列

1、题目描述

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

2、分析

        熟悉队列和栈的数据结构的特点,最大的不同就是队列是先入先出,而栈是先入后出。现在假设我们先用栈1push进去1,2,3三个元素,然后需要pop,那么pop的应该是1这个元素,那么我们将栈1的元素全部pop再push进第二个栈,这样第二个栈的元素入栈的顺序就是3,2,1,这样再pop就可以得到1。如果这个时候再往队列push元素,则将它push到第一个栈。可以看到,队列在做每一次push时其实都是往栈1push,而做pop时需要判断栈2是否为空,如果为空,则将栈1的元素全部弹出在push进栈2,如果不为空,直接pop即可。需要注意的是,stack的pop并不返回元素,需要使用中间变量。

3、代码

class Solution
{
public:
    void push(int node) {
        stack1.push(node);
    }

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

private:
    stack<int> stack1;
    stack<int> stack2;
};

4、相关知识点

        栈和队列相关知识。

posted @ 2019-05-22 17:25  吾之求索  阅读(99)  评论(0)    收藏  举报