Java 方法以特定顺序合并两个队列 专用ArrayQueue合并(ArrayQueue q1,ArrayQueue q2)引发ArrayQueueException { ArrayQueue mergeQueue=新的ArrayQueue(q1.size()+q2.size()); ArrayQueue smallestQueue=smallestQueue(q1,q2); ArrayQueue biggestQueue=biggestQueue(q1,q2); 对于(int index=0;index

Java 方法以特定顺序合并两个队列 专用ArrayQueue合并(ArrayQueue q1,ArrayQueue q2)引发ArrayQueueException { ArrayQueue mergeQueue=新的ArrayQueue(q1.size()+q2.size()); ArrayQueue smallestQueue=smallestQueue(q1,q2); ArrayQueue biggestQueue=biggestQueue(q1,q2); 对于(int index=0;index,java,merge,queue,Java,Merge,Queue,我一直在尝试一个练习,其中包括创建一个方法来合并两个队列。我上面的尝试在两个队列大小相同时有效,但在其他情况下是错误的 实现这一点的最佳方式是什么 谢谢。这不是你的方法唯一的问题 正确方法的伪代码如下所示: private ArrayQueue<E> merge( ArrayQueue<E> q1, ArrayQueue<E> q2 ) throws ArrayQueueException { ArrayQueue<E> mergeQue

我一直在尝试一个练习,其中包括创建一个方法来合并两个队列。我上面的尝试在两个队列大小相同时有效,但在其他情况下是错误的

实现这一点的最佳方式是什么


谢谢。

这不是你的方法唯一的问题

正确方法的伪代码如下所示:

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 );
}

ArrayQueue的javadoc在哪里?它不是一个标准的Java类,所以没有javadoc我们只能猜测它是如何工作的。
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