LeetCode232——Implement Queue using Stacks

  这题,评级是easy,按照思路也挺顺的。奏是一个字,溜儿。

  用栈实现一个队列,我实在想不出为啥要这么做,不过我们还是放下这些偏见立地成佛吧。

  来,因为队列先进先出,栈先进后出,那么一个栈肯定搞不定了,不然你要把所有元素都倒出来找第一个元素。所以用两个栈吧。

  1.压入队列,那么将一个队列做入口,一个队列做出口。进队简单,直接push进入口栈就可以了。

  2.出队操作,pop操作本身就是返回一个void。所以,首先判断出口栈是不是空的,不是空的就直接pop出口栈的栈顶元素。如果出口栈是空的拿么入口栈中有没有元素,入口栈中有元素,将入口栈的元素压入出口栈中,pop掉入口栈的元素,出口栈栈顶pop实现操作。但是在移动值的时候需要使用top不能直接pop因为pop返回的是void

  3.取队首元素,和出队操作是一样的,返回top就可以了。

  4.是否为空,简单了,两个都为空就返回空。

class Queue
{
public:
    stack<int>stkIn;
    stack<int>stkOut;
    // Push element x to the back of queue.
    void push(int x)
    {
        stkIn.push(x);
    }

    // Removes the element from in front of queue.
    void pop(void)
    {
        if(!stkOut.empty())
        {
            stkOut.pop();
        }
        else
        {
            while(!stkIn.empty())
            {
                stkOut.push(stkIn.top());
                stkIn.pop();
            }
            stkOut.pop();
        }
    }

    // Get the front element.
    int peek(void)
    {
        if(!stkOut.empty())
        {
            return stkOut.top();
        }
        else
        {
            while(!stkIn.empty())
            {
                stkOut.push(stkIn.top());
                stkIn.pop();
            }
            return stkOut.top();
        }
    }

    // Return whether the queue is empty.
    bool empty(void)
    {
        return stkIn.empty() && stkOut.empty();
    }
};

 

posted on 2015-12-08 10:25  MMac  阅读(220)  评论(0编辑  收藏  举报

导航