zoukankan      html  css  js  c++  java
  • 队列&栈//用队列实现栈

    使用队列实现栈的下列操作:

    • push(x) -- 元素 x 入栈
    • pop() -- 移除栈顶元素
    • top() -- 获取栈顶元素
    • empty() -- 返回栈是否为空

    注意:

    • 你只能使用队列的基本操作-- 也就是 push to backpeek/pop from frontsize, 和 is empty 这些操作是合法的。
    • 你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
    • 你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。
    class MyStack {
    
        /** Initialize your data structure here. */
        LinkedList<Integer> q1 = new LinkedList<>();
        LinkedList<Integer> q2 = new LinkedList<>();
        public MyStack() {
            
        }
        
        /** Push element x onto stack. */
        public void push(int x) {
            if(q1.size()==0&&q2.size()==0)
                q1.offer(x);
            else if(q1.size()==0){
                q2.offer(x);
            }else{
                q1.offer(x);
            }
        }
        
        /** Removes the element on top of the stack and returns that element. */
        public int pop() {
            if(q1.size()!=0){
                int length = q1.size();
                for(int i = 0; i < length-1; i++){
                    q2.offer(q1.poll());
                }
                return q1.poll();
            }else{
                int length = q2.size();
                for(int i = 0; i < length-1; i++){
                    q1.offer(q2.poll());
                }
                return q2.poll();
            }
        }
        
        /** Get the top element. */
        public int top() {
            if(q1.size()!=0){
                int length = q1.size();
                for(int i = 0; i < length-1; i++){
                    q2.offer(q1.poll());
                }
                int result = q1.element();
                q2.offer(q1.poll());
                return result;
            }else{
                int length = q2.size();
                for(int i = 0; i < length-1; i++){
                    q1.offer(q2.poll());
                }
                int result = q2.element();
                q1.offer(q2.poll());
                return result;
            }
        }
        
        /** Returns whether the stack is empty. */
        public boolean empty() {
            return q1.size()==0&&q2.size()==0;
        }
    }
    
    /**
     * Your MyStack object will be instantiated and called as such:
     * MyStack obj = new MyStack();
     * obj.push(x);
     * int param_2 = obj.pop();
     * int param_3 = obj.top();
     * boolean param_4 = obj.empty();
     */
    class MyStack {
    private:
        queue<int> q;
    public:
        /** Initialize your data structure here. */
        MyStack() {
            
        }
        
        /** Push element x onto stack. */
        void push(int x) {
            queue<int> tmp;
            while(!q.empty()){
                tmp.push(q.front());
                q.pop();
            }
            q.push(x);
            while(!tmp.empty()){
                q.push(tmp.front());
                tmp.pop();
            }
        }
        
        /** Removes the element on top of the stack and returns that element. */
        int pop() {
            int a = q.front();
            q.pop();
            return a;
        }
        
        /** Get the top element. */
        int top() {
            return q.front();
        }
        
        /** Returns whether the stack is empty. */
        bool empty() {
            return q.empty();
        }
    };
    
    /**
     * Your MyStack object will be instantiated and called as such:
     * MyStack obj = new MyStack();
     * obj.push(x);
     * int param_2 = obj.pop();
     * int param_3 = obj.top();
     * bool param_4 = obj.empty();
     */
  • 相关阅读:
    数学形态学——腐蚀、膨胀、开、闭、细化
    VS2010中 报错:error C2146、error C4430 原因一:缺少CvvImage类
    帧同步和状态同步
    HTML5触摸事件演化tap事件
    screenX clientX pageX的区别
    phaser的小游戏的onInputDown问题
    phaser入手
    pixi.js 微信小游戏 入手
    正则表达式
    剖析Vue原理&实现双向绑定MVVM-2
  • 原文地址:https://www.cnblogs.com/strawqqhat/p/10602356.html
Copyright © 2011-2022 走看看