2011-02-06 30 views
0
private ArrayQueue<E> merge(ArrayQueue<E> q1, ArrayQueue<E> q2) throws ArrayQueueException 
{ 
    ArrayQueue<E> mergeQueue = new ArrayQueue<E>(q1.size() + q2.size()); 

    ArrayQueue<E> smallestQueue = smallestQueue(q1, q2); 
    ArrayQueue<E> biggestQueue = biggestQueue(q1, q2); 

    for (int index = 0; index < smallestQueue.size(); index++) 
    { 
     E elementOne = smallestQueue.dequeue(); 
     E elementTwo = biggestQueue.dequeue(); 

     if (elementOne.compareTo(elementTwo) < 0) 
     { 
      mergeQueue.enqueue(elementOne); 
      mergeQueue.enqueue(elementTwo); 
     } 
     else 
     { 
      mergeQueue.enqueue(elementTwo); 
      mergeQueue.enqueue(elementOne); 
     } 
    } 

    for (int index = 0; index < biggestQueue.size(); index++) 
    { 
     mergeQueue.enqueue(biggestQueue.dequeue()); 
    } 

    return (mergeQueue); 
} 

私は、2つのキューをマージする方法を作成することに取り組んでいます。両方のキューが同じサイズである場合は上の試みはうまくいきますが、それ以外の場合は間違っています。特定の順序で2つのキューをマージする方法

これを実装するにはどうすればよいでしょうか?

ありがとうございました。

+1

どこArrayQueueのjavadocですか?これは標準的なJavaクラスではないので、javadocなしでできることは、それがどのように機能するかを推測することです。 –

答えて

1

あなたの方法で唯一の問題ではありません。正しい方法の

擬似コードは次のようになります。

while (both queues are not empty) { 
    retrieve first elements without removing them from their queues 
    compare them 
    put the appropriate element into the new queue and remove it from its old queue 
} 

if any of old queues is not empty, put its elements into the new queue 
関連する問題