我如何排序队列中的元素?

时间:2015-05-10 09:33:28

标签: c++

**我的教授要求我们在一个有序队列中合并两个队列。如何在队列中订购元素?我需要订购结果队列我需要制作临时队列吗? 我怎么能这样做?队列的实现是:

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)}
请帮助我

1 个答案:

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