zoukankan      html  css  js  c++  java
  • LeetCode 225 Implement Stack using Queues(用队列来实现栈)(*)

    翻译

    用队列来实现栈的例如以下操作。

    push(x) —— 将元素x加入进栈 pop() —— 从栈顶移除元素 top() —— 返回栈顶元素 empty() —— 返回栈是否为空 注意: 你必须使用一个仅仅有标准操作的队列。 也就是说,仅仅有push/pop/size/empty等操作是有效的。

    队列可能不被原生支持。这取决于你所用的语言。 仅仅要你仅仅是用queue的标准操作,你能够用list或者deque(double-ended queue)来模拟队列。

    你能够如果全部的操作都是有效的(比如,pop或peek操作不会被用在空栈上)。

    原文

    Implement the following operations of a stack using queues.
    
    push(x) -- Push element x onto stack.
    pop() -- Removes the element on top of the stack.
    top() -- Get the top element.
    empty() -- Return whether the stack is empty.
    
    Notes:
    
    You must use only standard operations of a queue 
    
    -- which means only push to back, peek/pop from front, size, and is empty operations are valid.
    
    
    Depending on your language, queue may not be supported natively. 
    
    You may simulate a queue by using a list or deque (double-ended queue), 
    
    as long as you use only standard operations of a queue.
    
    
    You may assume that all operations are valid (for example, 
    
    no pop or top operations will be called on an empty stack).

    分析

    对栈和队列不清楚的话。能够先看这篇图文介绍:【算法】7 分不清栈和队列?一张图给你完总体会

    至于这道题目。有一道很很相似的题目。

    本题是用队列来实现栈,以下这题是用栈来实现队列。由于在上一篇中解说过,原理是一样的,大家能够自己看看:LeetCode 232 Implement Queue using Stacks(用栈来实现队列)(*)

    代码

    class Stack {
    public:
        queue<int> q, q2;
    
        // Push element x onto stack.
        void push(int x) {
            q.push(x);
        }
    
        // Removes the element on top of the stack.
        void pop() {
            if (q.size() == 1) q.pop();
            else {
                while (q.size() > 1) {
                    q2.push(q.front());
                    q.pop();
                }
                q.pop();
                while (q2.size() > 0) {
                    q.push(q2.front());
                    q2.pop();
                }
            }
        }
    
        // Get the top element.
        int top() {
            if (q.size() == 1) return q.front();
            while (q.size() > 1) {
                q2.push(q.front());
                q.pop();
            }
            int temp = q.front();
            q2.push(q.front());
            q.pop();
            while (q2.size() > 0) {
                q.push(q2.front());
                q2.pop();
            }
            return temp;
        }
    
        // Return whether the stack is empty.
        bool empty() {
            return q.empty();
        }
    };
  • 相关阅读:
    Code Forces Gym 100886J Sockets(二分)
    CSU 1092 Barricade
    CodeChef Mahesh and his lost array
    CodeChef Gcd Queries
    CodeChef GCD2
    CodeChef Sereja and LCM(矩阵快速幂)
    CodeChef Sereja and GCD
    CodeChef Little Elephant and Balance
    CodeChef Count Substrings
    hdu 4001 To Miss Our Children Time( sort + DP )
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7387688.html
Copyright © 2011-2022 走看看