0

このように2つのキューを作成する場合:

    ArrayQueue q1 = new ArrayQueue();
    ArrayQueue q2 = new ArrayQueue();
    for (int i = 0; i < 5; i++) {
        q1.enqueue(new Integer(i));
    }
    for (int i = 5; i < 10; i++) {
        q2.enqueue(new Integer(i));
    }
    System.out.println("q1: " + q1);
    System.out.println("q2: " + q2);

とを出力q1: 4,3,2,1,0q2: 9,8,7,6,5ます。

q2キューq1をインターリーブされた要素を使用してキューにマージするメソッドが必要です。したがって、println'dが再び出力される場合:q1: 0,5,1,6,2,7,3,8,4,9およびq2: 9,8,7,6,5

私のクラスにはすべての適切なメソッドが含まれています、、、、、、...私enqueueのメソッド名は次のとおりです。dequeuepeekisEmptysizedoubleSize

    public void mergedQs(ArrayQueue q) {
    }

基本的に、オブジェクトを2つのキューに追加してから、2番目のキューを最初のキューにマージします(オブジェクトを追加するだけではありません)。理想的には、それらをキューのままにしておきたいので、それらをキャストしたり、ArrayListを使用したりすることは避けたいと思います。

4

1 に答える 1

4

これが役立つかもしれません。任意の数のキューをマージします。

public static <T> Queue<T> mergeQs(Queue<T> ... qs) {
    Queue<T> ret = new ConcurrentLinkedQueue<T>();
    boolean more;
    do {
        more = false;
        for (Queue<T> q : qs) 
            if (!q.isEmpty()) {
                ret.add(q.remove());
                more = true;
            }
    } while(more);
    return ret;
}
于 2012-11-22T12:51:13.963 に答える