我正在尝试实现一种方法,无论数据插入队列的顺序如何,都会对其进行排序。例如,我的主要用于测试方法:
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++;
}
答案 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
以更改排队顺序。