用C写了一个push(Queue **, Nod *)
方法。想要检查我在将 nods
插入 queue
时是否涵盖了基础知识。
void push_back(Queue ** q, Process * p){
p->next = NULL;
if( (*q)->head == NULL && (*q)->tail ==NULL){
(*q)->head = (*q)->tail = p;
}
(*q)->tail->next = p->next;
(*q)->tail = p;
}
我是否通过正确分配 p->next
将 NULL
分配给 (*q)->tail->next
?
最佳答案
(*q)->tail->next
应该已经是 NULL
。
如果队列不为空,那么您就没有正确链接到新节点。相反,如果队列不为空,则应使 (*q)->tail->next
指向 p
,然后使 tail 指向 p
:
if (/* queue is empty */)
{
...
}
else
{
(*q)->tail->next = p;
(*q)->tail = p;
}
正如我在评论中所说,您似乎不需要通过将指针传递给指针来创建额外的间接寻址,这意味着您可以(根据我的更改)将其重写为
void push_back(Queue * q, Process * p){
p->next = NULL;
if( q->head == NULL && q->tail ==NULL){
q->head = q->tail = p;
} else {
q->tail->next = p;
q->tail = p;
}
}
关于c - C中的一个函数,将 `push`个项目放到一个队列中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35650478/