zoukankan      html  css  js  c++  java
  • [LeetCode] 232. Implement Queue using Stacks 用栈来实现队列

    Implement the following operations of a queue using stacks.

    • push(x) -- Push element x to the back of queue.
    • pop() -- Removes the element from in front of queue.
    • peek() -- Get the front element.
    • empty() -- Return whether the queue is empty.

    Notes:

    • You must use only standard operations of a stack -- which means only push to toppeek/pop from topsize, and is empty operations are valid.
    • Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
    • You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).

    用栈来实现队列,对比类似题目225. Implement Stack using Queues 是反过来用。

    Java:

    class MyQueue {
     
        Stack<Integer> temp = new Stack<Integer>();
        Stack<Integer> value = new Stack<Integer>();
     
        // Push element x to the back of queue.
        public void push(int x) {
            if(value.isEmpty()){
                value.push(x);
            }else{
                while(!value.isEmpty()){
                    temp.push(value.pop());
                }
     
                value.push(x);
     
                while(!temp.isEmpty()){
                    value.push(temp.pop());
                }    
            }
        }
     
        // Removes the element from in front of queue.
        public void pop() {
            value.pop();
        }
     
        // Get the front element.
        public int peek() {
            return value.peek();
        }
     
        // Return whether the queue is empty.
        public boolean empty() {
            return value.isEmpty();
        }
    }  

     Python:

    class Queue:
        # initialize your data structure here.
        def __init__(self):
            self.A, self.B = [], []
    
        # @param x, an integer
        # @return nothing
        def push(self, x):
            self.A.append(x)
    
        # @return an integer
        def pop(self):
            self.peek()
            return self.B.pop()
            
        # @return an integer
        def peek(self):
            if not self.B:
                while self.A:
                    self.B.append(self.A.pop())
            return self.B[-1]
            
        # @return an boolean
        def empty(self):
            return not self.A and not self.B
    

    C++:

    class Queue {
    public:
        // Push element x to the back of queue.
        void push(int x) {
            stack<int> tmp;
            while (!s.empty()) {
                tmp.push(s.top());
                s.pop();
            }
            s.push(x);
            while (!tmp.empty()) {
                s.push(tmp.top());
                tmp.pop();
            }
        }
    
        // Removes the element from in front of queue.
        void pop(void) {
            s.pop();
        }
    
        // Get the front element.
        int peek(void) {
            return s.top();
        }
    
        // Return whether the queue is empty.
        bool empty(void) {
            return s.empty();
        }
    
    private:
        stack<int> s;
    };
    

    C++:

    class Queue {
    public:
        // Push element x to the back of queue.
        void push(int x) {
            _new.push(x);
        }
        
        void shiftStack() {
            if (_old.empty()) {
                while (!_new.empty()) {
                    _old.push(_new.top());
                    _new.pop();
                }
            }
        }
    
        // Removes the element from in front of queue.
        void pop(void) {
            shiftStack();
            if (!_old.empty()) _old.pop();
        }
    
        // Get the front element.
        int peek(void) {
            shiftStack();
            if (!_old.empty()) return _old.top();
            return 0;
        }
    
        // Return whether the queue is empty.
        bool empty(void) {
            return _old.empty() && _new.empty();
        }
    
    private:
        stack<int> _old, _new;
    };  

        

    类似题目:

    [LeetCode] 225. Implement Stack using Queues 用队列来实现栈

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    webpack学习之——模块(Modules)
    dns-prefetch对网站速度能提升有多少?详解dns-prefetch。
    类数组对象汇总
    HTML input type=file文件选择表单的汇总(二)
    238. 除自身以外数组的乘积
    1029.两地调度
    滑动窗口:无重复字符的最长子串
    统计网格中的矩形以及正方形
    关于正负数的二进制新发现以及求法
    基础练习: 矩阵乘法
  • 原文地址:https://www.cnblogs.com/lightwindy/p/8531857.html
Copyright © 2011-2022 走看看