首页 > 其他 > 详细

232. 用栈实现队列

时间:2020-07-23 15:37:05      阅读:60      评论:0      收藏:0      [点我收藏+]

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

  push(x) -- 将一个元素放入队列的尾部。
  pop() -- 从队列首部移除元素。
  peek() -- 返回队列首部的元素。
  empty() -- 返回队列是否为空。

示例:

MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);  
queue.peek();  // 返回 1
queue.pop();   // 返回 1
queue.empty(); // 返回 false

说明:

  你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
  你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
  假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。

解题思路:

  栈的特性,只能在一段进行操作,也就是后进先出。

// 解法1
class MyQueue {
    private Stack<Integer> stackInput;
    private Stack<Integer> stackOut;
    /** Initialize your data structure here. */
    public MyQueue() {
        stackInput = new Stack<>();
        stackOut = new Stack<>();
    }
    
    /** Push element x to the back of queue. */
    public void push(int x) {
        stackInput.push(x);
    }
    
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        if(stackOut.isEmpty()) {
            // 当stackOut为空时,把stackInputn内所有元素加入stackOut就形成队列顺序,还有入栈元素,先加入stackInput
            while(!stackInput.isEmpty()) {
                stackOut.push(stackInput.pop());
            }
        }
        return stackOut.pop();
    }
    
    /** Get the front element. */
    public int peek() {
        if(stackOut.isEmpty()) {       
            while(!stackInput.isEmpty()) {
                stackOut.push(stackInput.pop());
            }
        }
        return stackOut.peek();
    }
    
    /** Returns whether the queue is empty. */
    public boolean empty() {
        return stackOut.isEmpty() && stackInput.isEmpty();
    }
}

解法2
class MyQueue {
    private Stack<Integer> stackInput;
    private Stack<Integer> stackOut;
    /** Initialize your data structure here. */
    public MyQueue() {
        stackInput = new Stack<>();
        stackOut = new Stack<>();
    }
    
    /** Push element x to the back of queue. */
    public void push(int x) {
        while(!stackOut.isEmpty()) {
            stackInput.push(stackOut.pop());
        }
        stackInput.push(x);
        while(!stackInput.isEmpty()) {
            stackOut.push(stackInput.pop());
        }
    }
    
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        return stackOut.pop();
    }
    
    /** Get the front element. */
    public int peek() {
        return stackOut.peek();
    }
    
    /** Returns whether the queue is empty. */
    public boolean empty() {
        return stackOut.isEmpty();
    }
}

  

  

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-queue-using-stacks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

232. 用栈实现队列

原文:https://www.cnblogs.com/PHUN19/p/13364179.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!