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 题目汇总

  • 相关阅读:
    Kivy / Buildozer VM Ubuntu不能连接到网络的问题解决
    创建PHP组件(composer)
    uniapp基础
    标准js和浏览器js的区别(uniapp)
    swagger api工具 PHP组件 ---- 1
    阿里云视频点播--事件通知
    直接网页打印出现a标签的地址解决办法
    阿里云视频直播--直播转点播--实践2
    阿里云视频直播--直播转点播--实践1
    阿里云视频直播--直播转点播
  • 原文地址:https://www.cnblogs.com/lightwindy/p/8531857.html
Copyright © 2011-2022 走看看