我的任务是编写添加到队列后面并从前面删除的函数。

我已经编写了添加到队列的函数:

void queue_put(Queue *q, Qitem *new_item)
{

    new_item->next = NULL;

    if (queue_empty(q)){

            q->front = new_item;

    } else {

            q->back->next = new_item;
    }

    q->back = new_item;

}


这可以正常工作,但是我正在努力编写从队列前端删除的函数:

Qitem * queue_get(Queue *q)
{
    if (queue_empty(q)) {

            return (Qitem *)0;

    } else {

            Qitem front_item = q->front;
            q->front = q->front->next;
            return front_item;
    }

}


以上是我的最佳尝试,但没有用,我想知道是否有人可以提供帮助?我意识到这可能是一个基本问题,但是我对此很陌生。

最佳答案

这个如何?

Qitem * queue_get(Queue *q)
{
    if (queue_empty(q)) {

            return (Qitem *)0;

    } else {

            Qitem *front_item = q->front;
            Qitem *back_item = q->back;
            q->front = q->front->next;
            if (front_item == back_item) {
               q->back = NULL; // single element
            }
            return front_item;
    }
}

10-08 12:08