我如何在队列中排序元素

How i can sort elements in queue?

本文关键字:排序 元素 队列      更新时间:2023-10-16

**我的教授要求我们合并两个队列。我如何在队列中订购元素?我需要订购结果队列,我需要进行临时排队吗?我该怎么做?队列的实现是:

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

请帮助我

您可以将给定的2个队列放入2个单独的数组中。请注意,这两个单独的阵列是用它们自己的。现在,您可以将两个数组合并到另一个数组-sortedArray,然后从那里填充您的最终队列-sortedQueuesortedArray的元素

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