美文网首页
2020-06-04(补充记录)栈-用队列实现栈

2020-06-04(补充记录)栈-用队列实现栈

作者: 唐moumou | 来源:发表于2020-06-06 00:02 被阅读0次

    题目详情

    使用队列实现栈的下列操作:

    push(x) -- 元素 x 入栈
    pop() -- 移除栈顶元素
    top() -- 获取栈顶元素
    empty() -- 返回栈是否为空

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/implement-stack-using-queues

    思路

    因为队列的特点是先进先出,而栈的特点是后进先出(先进后出)。
    所以我们的目的就是把先进队的元素转移到后面,比如 5 - 4 - 3依次进入队列,就需要转换成 3 - 4 - 5 的排列顺序,形成栈的结构。
    所以假设我们先定义一个队列queue
    std::queue<int> temp_queue;
    由于每次push进队列的只有一个值。根据这个特点我们先把这个值push进队列(假设为5)
    所以现在temp_queue = {5},对于第二个需要push的值(假设为4),肯定是不能直接push进temp_queue的,不然就又是队列的结构了。所以如果我们把temp_queue里有的值pop出来,并存到另外一个队列中(假设定义为data_queue),此时temp_queue为空,然后我们知道data_queue = {5}。
    再把第二个值push进temp_queue,temp_queue = {4}。仔细观察可以发现,如果把data_queue里的值pop出来push进temp_queue。在temp_queue里就构成了 5->4 的队列 其中4在头部。然后再把temp_queue的值依次push进data_queue , data_queue就是对应的栈结构了。

    后续的操作就很类似了

    就是把data_queue里已经构成栈结构的成员看成一个整体,再进行上面同样的操作,就能实现把后进队的元素放到头部,从而一直构成栈的结构(如果画个图上面的过程会更清晰!)

    其他函数的补充就比较简单不做笔记了,详情见下代码

    class MyStack {
    public:
        /** Initialize your data structure here. */
        MyStack() {
    
        }
        
        /** Push element x onto stack. */
        void push(int x) {
            std::queue<int> temp_queue;
            temp_queue.push(x);
            while(!data.empty())
            {
                temp_queue.push(data.front());
                data.pop();
            }
            while(!temp_queue.empty())
            {
                data.push(temp_queue.front());
                temp_queue.pop();
            }
        }
        
        /** Removes the element on top of the stack and returns that element. */
        int pop() {
            int x = data.front();
            data.pop();
            return x;
        }
        
        /** Get the top element. */
        int top() {
            return data.front();
        }
        
        /** Returns whether the stack is empty. */
        bool empty() {
            return data.empty();
        }
    private:
        std::queue<int> data;
    };
    
    

    相关文章

      网友评论

          本文标题:2020-06-04(补充记录)栈-用队列实现栈

          本文链接:https://www.haomeiwen.com/subject/xyrazhtx.html