**我的教授要求我们在一个有序队列中合并两个队列。如何在队列中订购元素?我需要订购结果队列我需要制作临时队列吗? 我怎么能这样做?队列的实现是:
class QueType
{
public:
QueType(int max);
QueType();
~QueType();
void MakeEmpty();
bool IsEmpty() const;
bool IsFull() const;
void Enqueue(ItemType newItem);
void Dequeue(ItemType& item);
private:
int front;
int rear;
ItemType* items;
int maxQue;
};
QueType::QueType(int max)
{
maxQue = max + 1;
front = maxQue - 1;
rear = maxQue - 1;
items = new ItemType[maxQue];
}
QueType::QueType()
{
maxQue = 501;
front = maxQue - 1;
rear = maxQue - 1;
items = new ItemType[maxQue];
}
QueType::~QueType() // Class destructor.
{
delete [] items;
}
void QueType::MakeEmpty()
{
front = maxQue - 1;
rear = maxQue - 1;
}
bool QueType::IsEmpty() const
// Returns true if the queue is empty; false otherwise.
{
return (rear == front);
}
bool QueType::IsFull() const
// Returns true if the queue is full; false otherwise.
{
return ((rear + 1) % maxQue == front);
}
void QueType::Enqueue(ItemType newItem)
// Post: If (queue is not full) newItem is at the rear of the queue;
// otherwise, a FullQueue exception is thrown.
{
if (IsFull())
throw FullQueue();
else
{
rear = (rear +1) % maxQue;
items[rear] = newItem;
}
}
void QueType::Dequeue(ItemType& item)
{
if (IsEmpty())
throw EmptyQueue();
else
{
front = (front + 1) % maxQue;
item = items[front];
}
}
int main(){
int item;
QueType <int> q1;
q1.Enqueue(15);
q1.Enqueue(20);
q1.Enqueue(2);
q1.Enqueue(41);
q1.Enqueue(17);
QueType <int> q2;
q2.Enqueue(10);
q2.Enqueue(41);
q2.Enqueue(8);
q2.Enqueue(4);
q2.Enqueue(1);
QueType <int> result;
While(!q1.isEmpty(){
q1.Dequeue.(item)
result.Enqueue(item)}
While(!q2.isEmpty(){
q2.Dequeue.(item)
result.Enqueue(item)}
请帮助我
答案 0 :(得分:0)
您可以将给定的2个队列放入2个独立的阵列中。请注意,这两个单独的数组按自己的顺序排序。现在,您可以简单地将2个数组合并到另一个数组 - sortedArray
,然后从那里填入最终队列 - sortedQueue
,其顺序为sortedArray
array arr1, arr2
while(!q1.Empty()) {
insertToArray(arr1, q1.dequeue());
}
while(!q2.Empty()) {
insertToArray(arr2, q2.dequeue());
}
int maxLength = arr1.Length() > arr2.Length() ? arr1.Length() :arr2.Length()
array sortedArray;
for(int i = 0; i < (q1.size() + q2.size() ); ++i) {
if((i < maxLength)) {
sortedArray[i] = arr1[i] >= arr2[i] ? arr1[i] : arr2[i];
} else {
fillArr2ToSortedArray();
break;
}
}
Queue sortedQueue;
for(int i = 0; i < (q1.size() + q2.size() ); ++i) {
sortedQueue.enqueu(sortedArray[i]);
}