c - C中的一个函数,将 `push`个项目放到一个队列中

标签 c queue

用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->nextNULL 分配给 (*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/

相关文章:

asp.net-core - 具有队列处理功能的 .NET 核心 Web api

c++ - 双重自由或腐败 C++

oracle - Oracle AQ/Streams 对我的情况有用吗?

c++ - C++ 中包含固定大小数组的队列

c - 程序从管理员升级到系统

c - 如何使用 pthread_atfork() 和 pthread_once() 重新初始化子进程中的互斥量

C警告: passing argument 2 of ‘strcpy’ makes pointer from integer without a cast

c - 参数 #1 的不兼容类型

c - 我如何计算 block 号

Ruby Eventmachine排队问题