推进排序队列实施

时间:2015-04-15 00:30:09

标签: c++

我正在尝试实现一种方法,无论数据插入队列的顺序如何,都会对其进行排序。例如,我的主要用于测试方法:

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

1 个答案:

答案 0 :(得分:0)

我认为你应该明确推动情况:

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

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

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以更改排队顺序。