C 如何向队列中添加元素

C 如何向队列中添加元素,c,queue,C,Queue,我真的不明白我的代码出了什么问题 当我添加第一个元素时,一切都很好,但之后,它就不起作用了。当ptr为NULL时,它进入while循环。 检查是否为空是否有问题 struct Car { int startTime; char *model; char *code; char *location; struct Car *next; int deptEnterTime; bool waitingForFraming; bool wa

我真的不明白我的代码出了什么问题

当我添加第一个元素时,一切都很好,但之后,它就不起作用了。当ptr为NULL时,它进入while循环。 检查是否为空是否有问题

struct Car
{
    int startTime;
    char *model;
    char *code;
    char *location;
    struct Car *next;
    int deptEnterTime;
    bool waitingForFraming;
    bool waitingForPainting;
    bool waitingForPolishing;
    bool waitingForEngine;
    bool waitingForElectronic;
    bool waitingForIndoor;
    bool waitingForTest;
};

struct Car *head = NULL;
void insert(int startTime, char *model, char *code)
{
    /*create a link*/
    struct Car *link = (struct Car*) malloc(sizeof(struct Car));

    link->startTime= startTime;
    link->model = model;
    link->code = code;
    link->waitingForFraming=true;
    link->waitingForPainting=false;
    link->waitingForPolishing=false;
    link->waitingForEngine=false;
    link->waitingForElectronic=false;
    link->waitingForIndoor=false;
    link->waitingForTest=false;

    if(head == NULL)
    {
        head = link;
    }
    else
    {
        struct Car *ptr;
        ptr = head->next;

        while(ptr != NULL)
        {
            ptr = ptr->next;
        }
        ptr = link;

    } 
}

您应该将其分配给最后一个可用结构,而不是下一个,以下是您可以执行此操作的方法:

struct Car *ptr = head;
while(ptr->next != NULL)
{
    ptr = ptr->next;
}
ptr->next = link;
我建议将link->next设置为NULL,以避免出现随机数据:

....
link->waitingForTest=false;
link->next=NULL;

if(head == NULL)
.....

您应该将其分配给最后一个可用结构,而不是下一个,以下是您可以执行此操作的方法:

struct Car *ptr = head;
while(ptr->next != NULL)
{
    ptr = ptr->next;
}
ptr->next = link;
我建议将link->next设置为NULL,以避免出现随机数据:

....
link->waitingForTest=false;
link->next=NULL;

if(head == NULL)
.....

对于初学者,必须为添加的元素将数据成员
next
设置为NULL

struct Car *link = (struct Car*) malloc(sizeof(struct Car));

link->next = NULL;
//...
这部分函数也是错误的

else
{
    struct Car *ptr;
    ptr = head->next;

    while(ptr != NULL)
    {
        ptr = ptr->next;
    }
    ptr = link;

} 
应该这样写

else
{
    struct Car *ptr = head;

    while( ptr->next != NULL)
    {
        ptr = ptr->next;
    }
    ptr->next = link;

} 

请注意,如果要将元素添加到列表的末尾,则应至少声明一个双面列表。否则,将元素添加到列表的末尾是低效的。

对于初学者,必须为添加的元素将数据成员
next
设置为NULL

struct Car *link = (struct Car*) malloc(sizeof(struct Car));

link->next = NULL;
//...
这部分函数也是错误的

else
{
    struct Car *ptr;
    ptr = head->next;

    while(ptr != NULL)
    {
        ptr = ptr->next;
    }
    ptr = link;

} 
应该这样写

else
{
    struct Car *ptr = head;

    while( ptr->next != NULL)
    {
        ptr = ptr->next;
    }
    ptr->next = link;

} 
请注意,如果要将元素添加到列表的末尾,则应至少声明一个双面列表。否则,将元素添加到列表的末尾是低效的