zoukankan      html  css  js  c++  java
  • leetcode- 232. Implement Queue using Stacks

    使用栈实现队列:

    将栈中的元素取出再存入一次就是队列:

    class MyQueue {
    public:
        /** Initialize your data structure here. */
        MyQueue() {
            
        }
        
        /** Push element x to the back of queue. */
        void push(int x) {
           s.push(x); 
    
        }
        
        /** Removes the element from in front of queue and returns that element. */
        int pop() {
    
            stack<int> s1;
            while(!s.empty())
            {
                int t=s.top();
                s.pop();
                s1.push(t);
                
            }
            int t=s1.top();
            s1.pop();
            while(!s1.empty())
            {
                int t=s1.top();
                
                s.push(t);
                s1.pop();
            }
            return t;
            
        }
        
        /** Get the front element. */
        int peek() {
            stack<int> s_tem=s;
            while(s_tem.size()>1)
            {
             s_tem.pop();
            }
            return s_tem.top();
           
        }
        
        /** Returns whether the queue is empty. */
        bool empty() {
            return s.empty();
            
        }
        private:
        stack<int> s;
       
    };
    
    /**
     * Your MyQueue object will be instantiated and called as such:
     * MyQueue obj = new MyQueue();
     * obj.push(x);
     * int param_2 = obj.pop();
     * int param_3 = obj.peek();
     * bool param_4 = obj.empty();
     */
    

      

    更简单一点实现,pop和top的实现互相借助时:

    class MyQueue {
    public:
        stack<int> S1, S2;
        /** Initialize your data structure here. */
        MyQueue() {
               
        }
        
        /** Push element x to the back of queue. */
        void push(int x) {
            S1.push(x);
        }
        
        /** Removes the element from in front of queue and returns that element. */
        int pop() {
            int v = -1;
            if (!S2.empty()) { v = S2.top(); S2.pop();}
            else {
                while(!S1.empty()) {
                    S2.push(S1.top());
                    S1.pop();
                }
                v = S2.top();
                S2.pop();
            }
            return v;
        }
        
        /** Get the front element. */
        int peek() {
            if (!S2.empty()) return S2.top();
            else {
                while(!S1.empty()) {
                    S2.push(S1.top());
                    S1.pop();
                }
                return S2.top();
            }
        }
        
        /** Returns whether the queue is empty. */
        bool empty() {
            return (S1.empty()) && (S2.empty());
        }
    };
    
    /**
     * Your MyQueue object will be instantiated and called as such:
     * MyQueue obj = new MyQueue();
     * obj.push(x);
     * int param_2 = obj.pop();
     * int param_3 = obj.peek();
     * bool param_4 = obj.empty();
     */
    

      

  • 相关阅读:
    剑指office--------合并两个排序的链表
    剑指office--------栈的压入、弹出序列
    剑指office--------二叉树中和为某一值的路径
    剑指office--------翻转单词顺序列
    剑指office--------丑数
    剑指office--------机器人的运动范围
    剑指office--------二叉树的下一个结点
    数论------欧拉函数
    hdu 5831 Rikka with Parenthesis II
    hdu 5821 Ball (贪心)
  • 原文地址:https://www.cnblogs.com/fanhaha/p/7271606.html
Copyright © 2011-2022 走看看