寒光博客

[java] 用两个栈实现一个队列操作
QueueByStack cc150 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为in...
扫描右侧二维码阅读全文
26
2019/10

[java] 用两个栈实现一个队列操作

QueueByStack

cc150
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

思路

第二个栈等于是维护 如果只有一个栈要出队列的元素
那么这个元素在队列的最底层
所以我们用把栈的元素一依次push到维护栈内
从而 是的 要出队列的在 最上方 也是实现了 栈的逆序
而在入队列时候我们还是入 栈1 依次排列进去

为了提高效率 我们采用move方法 入队 在栈1 ,出队 在栈2

代码

package _09_Linear.Stack_QueuePractice;

import java.util.Stack;

public class QueueByStack {
    /**
     * 用两个栈实现 队列的push和pop操作 队列元素为int
     * Queue 先进先出
     */
    Stack<Integer> stack1 = new Stack<>();
    Stack<Integer> stack2 = new Stack<>();

    /**
     * 维护栈的操作 123 》 321
     *
     * @param source
     * @param target
     */
    private void move(Stack<Integer> source, Stack<Integer> target) {
        while (!source.empty()) {
            target.push(source.pop());
        }
    }

    public void enqueue(int node) {
        if (stack1.empty()) {
            move(stack2, stack1);
        }
        stack1.push(node);

    }

    public int dequeue() {
        if (stack2.empty()) {
            move(stack1, stack2);
        }
        return stack2.pop();

    }

    public static void main(String[] args) {
        QueueByStack obj = new QueueByStack();
        obj.enqueue(1);
        obj.enqueue(2);
        System.out.println(obj.dequeue());
        obj.enqueue(3);
        System.out.println(obj.dequeue());
        obj.enqueue(4);
        obj.enqueue(5);
        System.out.println(obj.dequeue());
        System.out.println(obj.dequeue());
        System.out.println(obj.dequeue());
    }
}

本文作者:Author:     文章标题:[java] 用两个栈实现一个队列操作
本文地址:https://dxoca.cn/java/307.html       百度已收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。
Last modification:October 26th, 2019 at 12:30 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment