2011-02-06 54 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); 
} 

我一直在尝试一个练习,其中涉及到创建合并两个队列的方法。我的上面的尝试在两个队列都是相同大小的情况下工作,但是否则它是错误的。按特定顺序合并两个队列的方法

什么是最好的实施方式?

谢谢。

+1

哪里是为ArrayQueue的Javadoc?这不是一个标准的Java类,所以我们没有javadoc就可以做的事情是猜测它是如何工作的。 – 2011-02-06 15:38:41

回答

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