美文网首页
栈-E232-用栈实现队列

栈-E232-用栈实现队列

作者: 三次元蚂蚁 | 来源:发表于2019-03-20 11:42 被阅读0次

题目

  • 概述:设计一个类,使用栈完成队列的主要功能:
  1. push(x):将x放入队尾
  2. pop():将队首元素移除并返回该元素
  3. peek():返回队首元素
  4. empty():队列为空返回true,反之false

只允许使用栈的标准操作:push(x), pop(),peek(),empty(),size()

假设所给出的操作都是合理的

思路

  • 由于栈和队列的功能是相反的,想只使用一个栈实现队列的功能是不科学的,不妨试试用两个栈

  • 每次执行队列的pop()操作都把一个栈的所有元素都pop()出来并依次push(x)到另一个栈中,则另一个栈栈顶元素即为原来那个栈栈底的元素,获取该元素后,将其pop(),再把剩下的元素pop()出来并依次push(x)到原先那个栈中即可,队列的push(x)和empty()的操作和栈的操作一致

  • 由于peek()操作只是想要获取队首元素,而不需要移除元素,所以没必要将所有元素从一个栈移动到另一个栈,只需要在适当的时机存储队首的元素即可:

  1. 执行push(x)操作前队列为空时
  2. 执行pop()操作中将得到的元素返回时
  3. 执行pop()操作中将另一个栈栈顶元素pop()后存储此时另一个栈的栈顶元素

特别注意:存储队首元素的元素类型应为包装类型,否则可能导致null类型拆箱时报空指针异常

代码

class MyQueue {
    private Integer mTopValue; //must be Integer avoid unboxing leading to NullException
    private LinkedList<Integer> mStack = new LinkedList<>();
    private LinkedList<Integer> mTempStack = new LinkedList<>();

    /** Initialize your data structure here. */
    public MyQueue() {
        
    }
    
    /** Push element x to the back of queue. */
    public void push(int x) {
        if (mStack.isEmpty()) {
            mTopValue = x;
        }
        mStack.push(x);
    }
    
    /** Removes the element from in front of queue and returns that element. */
    public int pop() {
        while (!mStack.isEmpty()) {
            mTempStack.push(mStack.pop());
        }
        int temp = mTempStack.pop();
        mTopValue = mTempStack.peek(); //must store after pop
        while (!mTempStack.isEmpty()) {
            mStack.push(mTempStack.pop());
        }
        return temp;
    }
    
    /** Get the front element. */
    public int peek() {
        return mTopValue;
    }
    
    /** Returns whether the queue is empty. */
    public boolean empty() {
        return mStack.isEmpty();
    }
}

相关文章

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • 栈-E232-用栈实现队列

    题目 概述:设计一个类,使用栈完成队列的主要功能: push(x):将x放入队尾 pop():将队首元素移除并返回...

  • leecode刷题(26)-- 用栈实现队列

    leecode刷题(26)-- 用栈实现队列 用栈实现队列 使用栈实现队列的下列操作: push(x) -- 将一...

  • C语言第七次作业:链表

    707. 设计链表 空指针 空节点 225. 用队列实现栈 链式存储栈 双队列实现栈 232. 用栈实现队列 链式...

  • 栈&队列

    一、栈&队列总结 栈/队列的应用接雨水验证栈序列滑动窗口的最大值 栈/队列的特殊实现用两个栈实现队列用两个队列实现...

  • 队列之-队列实现栈

    一、队列实现栈核心算法概述 之前已经描述过了用栈实现队列的功能,见栈系列之-实现队列,那么同样队列也可以用来实现栈...

  • 38_两个有趣的问题

    关键词:通过栈实现队列、通过队列实现栈 0. 通过栈实现队列 用栈实现队列等价于用后进先出的特性实现先进先出的特性...

  • LeetCode 每日一题 [12] 用队列实现栈

    LeetCode 用队列实现栈 [简单] 使用队列实现栈的下列操作: push(x) -- 元素 x 入栈pop(...

  • LeetCode:栈实现队列&队列实现栈

    225. 用队列实现栈 使用队列实现栈的下列操作:push(x) -- 元素 x 入栈pop() -- 移除栈顶元...

  • Algorithm小白入门 -- 队列和栈

    队列和栈队列实现栈、栈实现队列单调栈单调队列运用栈去重 1. 队列实现栈、栈实现队列 队列是一种先进先出的数据结构...

网友评论

      本文标题:栈-E232-用栈实现队列

      本文链接:https://www.haomeiwen.com/subject/rznamqtx.html