用栈实现队列

问题:

用两个栈实现队列的基本功能

思路:

第一个栈正常加元素,再把第一个栈的元素pop到第二个栈,这时候就可以实现队列的功能了,即先进先出,在这里要注意两点,第一点在往第二个栈中倒的时候必须保证第二个栈为空,第二点,每次往第二个栈倒的时候必须保证第一个栈全部倒出,不满足这两点任意一点都会出错。

代码:

public static class TwoStacksQueue {
        private Stack<Integer> stackPush;
        private Stack<Integer> stackPop;

        public TwoStacksQueue() {
            stackPush = new Stack<Integer>();
            stackPop = new Stack<Integer>();
        }

        public void push(int pushInt) {
            stackPush.push(pushInt);
        }

        public int poll() {
            if (stackPop.empty() && stackPush.empty()) {
                throw new RuntimeException("Queue is empty!");
            } else if (stackPop.empty()) {
                while (!stackPush.empty()) {
                    stackPop.push(stackPush.pop());
                }
            }
            return stackPop.pop();
        }

        public int peek() {
            if (stackPop.empty() && stackPush.empty()) {
                throw new RuntimeException("Queue is empty!");
            } else if (stackPop.empty()) {
                while (!stackPush.empty()) {
                    stackPop.push(stackPush.pop());
                }
            }
            return stackPop.peek();
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解:队列:先进先出栈:...
    MAXPUP阅读 131评论 0 0
  • 题目: 正如标题所述,你需要使用两个栈来实现队列的一些操作。队列应支持push(element),pop() 和 ...
    6默默Welsh阅读 224评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,726评论 25 709
  • 一、爬取今日头条新闻 为什么要这么爬请看 获取JS动态内容既然 selenium 能模仿浏览器的行为,那么我们直接...
    交易狗二哈阅读 2,108评论 0 2
  • 分开时难过不能说 谁没谁不能好好过 那天我们走了很久没有争吵过 –《其实》 这首歌来自薛之谦,谦谦...
    车车车66阅读 218评论 0 0