zoukankan      html  css  js  c++  java
  • 225.Implement Stack using Queues

    用队列实现栈的功能。
    MyStack stack = new MyStack();

    stack.push(1);
    stack.push(2);
    stack.top(); // returns 2
    stack.pop(); // returns 2
    stack.empty(); // returns false

    思路:关键在于队列是先进先出,而栈是后进先出,所以他们的顺序是反着的,解决办法就是,每一次push一个数据 x 到队列时,就循环的将队列中位于 x 前面的数拿出来,再放入到 队列尾部去,让 x 处于队列的头部。其余的 top( ) , pop( ) ,empty( ) 就直接利用队列的属性即可。

    class MyStack {
    private:
        queue<int> q1;
    public:
        void push(int x) {
            q1.push(x);
            for (int i = 0; i < q1.size() - 1; i++) {
                q1.push(q1.front());
                q1.pop();
            }
        }
        int pop() {
            int x = q1.front();
            q1.pop();
            return x;
        }
        int top() {
            return q1.front();
        }
        bool empty() {
            return q1.empty();
        }
    };

    Java 版:

    class MyStack {
        Queue<Integer> queue1;
        Queue<Integer> queue2;//运用两个队列
        public MyStack() {
            queue1 = new LinkedList<>();
            queue2 = new LinkedList<>();//初始化
        }
        
        public void push(int x) {
            if(queue2.size() == 0) queue2.add(x);
            else{ //使用queue2 一直保存栈顶元素
                queue1.add(queue2.remove());
                queue2.add(x);
            }
        }
        
        public int pop() {
            int res;
            if(queue2.size() == 1) res = queue2.remove();
            else{ //栈顶元素存在于 queue2 中,则直接获取;否则,从 queue1 中获取
                while(queue1.size() > 1){
                    queue2.add(queue1.remove());
                }
                res = queue1.remove();
                Queue<Integer> tmp = queue1;
                queue1 = queue2; //queue1 为空后,交换 queue1 、queue2 的位置
                queue2 = tmp;
            }
            return res;
        }
        
        public int top() {
            int res = pop();
            push(res); //先 pop 获取栈顶元素,再 push 存入
            return res;
        }
        
        public boolean empty() {
            return queue1.isEmpty() && queue2.isEmpty();
        }
    }
  • 相关阅读:
    对结对编程的测试
    用例
    结对编程 一
    个人项目总结与结对编程的开始
    7-6随便写写
    7-5个人日报
    7-4个人报告
    7.1-7.3个人日报
    6-30个人日报
    6-29个人日报
  • 原文地址:https://www.cnblogs.com/luo-c/p/12872672.html
Copyright © 2011-2022 走看看