• 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();
     */
    

      

  • 相关阅读:
    硬件加速器为人工智能应用服务
    js 获取指定字符串个数
    js 仿微信投诉—引入vue.js,拆分组件为单个js
    css 图片波浪效果
    svg path命令
    谷歌浏览器—打断点调试页面
    js 实现加载百分比效果
    js 实现纵向轮播
    css 图片高度自适应
    js 禁止/允许页面滚动
  • 原文地址:https://www.cnblogs.com/fanhaha/p/7271606.html
Copyright © 2020-2023  润新知