您的位置:首页 > Web前端

利用两个栈实现队列的功能

2016-06-16 16:50 295 查看
题目:利用两个栈实现队列的功能

思路:我们知道栈是后入先出的(LIFO),通过两个栈的配合是可以实现先入先出的,我们可以理解为负负得正

。我们把其中的一个栈设置为存放压入元素的栈,另一个栈用来弹出元素。这里我们需要注意的是,当弹出元素时,我们先要判断stack2是否为空。

1、不为空,那么我们直接弹出stack2的元素即可。

2、为空,那么我们要看stack1中是否有元素。若有,那么我们需要将stack1的元素导入stack2中,再弹出。若没有,那么操作是违法的,所以要抛出异常,这里为了简单起见,我直接返回-1代表操作违法。

具体代码如下,比较简单,不做过多解释,有不足的地方望各位多多提出来。谢谢。

class Solution

{

public:

    void push(int node) {

        stack1.push(node);

    }

    int pop() {

        if(!stack2.empty()){

            int res=stack2.top();

            stack2.pop();

            return res;

        }

        else if(!stack1.empty()){

            while(!stack1.empty()){

                int temp=stack1.top();

                stack1.pop();

                stack2.push(temp);

            }

            int res=stack2.top();

            stack2.pop();

            return res;  

        }

        else{

            return -1;

        }

    }

private:

    stack<int> stack1;

    stack<int> stack2;

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  剑指offer 队列