C语言中队列的链接实现

时间:2017-08-28 16:14:06

标签: c pointers

我编写了一个函数Serve来获取队列中的前节点并将其删除。它如下:

void Serve(QueueNode **p,Queue *q)
{
    if(QueueEmpty(q))
        Error("Queue is empty!");
    else
    {
        if(q->front==q->rear)
        {
            *p=q->front;
            q->front=q->rear=NULL;
        }
        else{
            *p=(q->front);
            q->front=q->front->next;
            (*p)->next=NULL;
        }
    }
}

我从主函数调用它如下:

int main() {
    QueueNode **p=malloc(sizeof(QueueNode));
    Queue *q=CreateQueue();
    Append('a',q);
    Append('b',q);
    Append('c',q);
    Append('d',q);
    Serve(p,q);
}

在声明指向指针QueueNode的同时,如果我将其设置为NULL或保持未初始化,程序会给我NULL指针取消引用或访问错误的内存位置。我明白为什么。但是,在这里,当我在此行中使用QueueNode创建malloc时:

QueueNode **p=malloc(sizeof(QueueNode));

当我在q->front函数中将其重新分配给Serve时,分配的空间会被浪费掉。我该如何保存这个空间。另外,我只需要一个指向q->front的指针。谢谢!

1 个答案:

答案 0 :(得分:1)

您不需要为p分配内存。它已经在函数Append()中分配。

int main() {
    QueueNode *p=NULL; 
    Queue *q=CreateQueue(); 
    Append('a',q); 
    Append('b',q); 
    Append('c',q); 
    Append('d',q); 
    Serve(&p,q); 
}