天天看點

如何使用一個隊列實作一個棧效果呢?

下文是筆者收集的使用隊列實作棧效果的方法分享,如下所示:

實作思路:

       使用兩個隊列,poll時,每次互相倒出,得到最後一個結果,如下所示:

package com.java265.algorithm;

import java.util.Queue;

/*
 * 作者:java265.com
 *使用一個隊列實作一個棧效果 
 * */
public class QueueToStack {

    public static void main(String[] args) {
    
        // 先進顯出
        
        QueueToStackStance.add(10);
        QueueToStackStance.add(9);
        QueueToStackStance.add(1);
        QueueToStackStance.add(1110);
        System.out.println("=============");

        // 實作棧效果
        QueueToStackStance.poll();
        QueueToStackStance.poll();
        QueueToStackStance.poll();
        QueueToStackStance.poll();
        QueueToStackStance.poll();
        QueueToStackStance.poll();
        QueueToStackStance.poll();
        QueueToStackStance.poll();


    }
}

class QueueToStackStance {

    static Queue<Integer> queue1 = new java.util.LinkedList<>();
    static Queue<Integer> queue2 = new java.util.LinkedList<>();

    static int size = 0;

    static {
    }

    static void add(int a) {

        if (queue2.size() > 0) {
            queue2.add(a);
        } else {
            queue1.add(a);
        }
         
    }

    static void poll() {

        if (queue2.size() > 0) {
            while (!queue2.isEmpty()) {
                if (queue2.size() != 1) {
                    queue1.add(queue2.poll());
                } else {
                    System.out.println(queue2.poll());

                }
            }
        } else {
            while (!queue1.isEmpty()) {
                if (queue1.size() != 1) {
                    queue2.add(queue1.poll());
                } else {
                    System.out.println(queue1.poll());

                }
            }
        }

    }

}