如何将元素添加到队列中

时间:2016-12-11 13:02:35

标签: c queue

我真的无法理解我的代码有什么问题。

当我添加第一个元素时,一切都很好但在那之后,它不起作用。当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;

    } 
}

2 个答案:

答案 0 :(得分:0)

你应该将它分配给最后一个可用的结构,而不是下一个,这是你如何做到的:

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

我建议在NULL旁边设置link->以避免随机数据:

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

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

答案 1 :(得分:0)

对于初学者,您必须为添加的元素将数据成员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;

} 

考虑到如果要将元素添加到列表末尾,则应至少声明一个双面列表。否则,在列表末尾添加元素效率很低。