C 如何向队列中添加元素
我真的不明白我的代码出了什么问题 当我添加第一个元素时,一切都很好,但之后,它就不起作用了。当ptr为NULL时,它进入while循环。 检查是否为空是否有问题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
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;
}
请注意,如果要将元素添加到列表的末尾,则应至少声明一个双面列表。否则,将元素添加到列表的末尾是低效的