推送到排序队列实现

Pushing Into a Sorted Queue Implementation

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

我正在尝试实现一种方法,无论数据插入队列的顺序如何,它都会被排序。例如,我的主要内容是测试该方法:

OrderedQueue ordQueue;
    ordQueue.push(2);
    ordQueue.push(1);
    ordQueue.push(3);
    ordQueue.display();

它应该输出:1、2、3。 但是我的推送方法有问题。我应该如何组织数据?

 void OrderedQueue::push(int item)
{
    if (IsEmpty())
        front = rear = new ListQueueNode(item);
    else
    {
        ListQueueNode *here = front;
        ListQueueNode *ptr = rear->next = new ListQueueNode(item);
        while (here!=NULL){
             if (item < here->value){
                 front->next = front;
                 front = ptr;
            }
             else if (item > here->value){
                 rear = ptr;
             }
             here = here->next;
        }
    }
    count++;
}
我认为

你应该清楚推动情况:

  • 新元素作为第一项被推送到队列
  • 其他

所以你应该改变你的代码:

void OrderedQueue::push(int item)
{
    if (IsEmpty())
        front = rear = new ListQueueNode(item);
    else
    {
        ListQueueNode here = front;
        ListQueueNode prev = NULL;
        ListQueueNode ptr = new ListQueueNode(item);
        while (here != NULL  && item < here.value) {
            prev = here;
            here = here.next;
        }
        if (prev == NULL) {  // push new element as the first item
            ptr.next = front;
            front = ptr;
        } else {  // other
            prev.next = ptr;
            ptr.next = here;
        }
    }
    count++;
}

遵循以下代码:后面在队列中包含最小值,前面在队列中包含最大值。您可以更改item > here.value以更改队列的顺序。