C-about空条件和空闲队列的链表实现

时间:2017-11-04 12:24:50

标签: c data-structures queue free

这是从我已经完成的队列中删除前项的代码。 我试着理解itemPtr将以某种方式在主要中使用..尚不知道,但这不是重点。 我想知道是否

if (queue->count == 0)
可以使用

代替

if (!queue->count)

NULL和0是否以相同的方式使用?

要添加,这是做什么的?

free(deleteLoc)

我认为deleteLoc会在此dequeue方法结束后消失,但为什么要添加它?这不是我的代码,所以我很好奇。它是否会删除deleteLoc包含的内存或queue-> front? 不是重点是让数据本身消失吗?

谢谢。

bool dequeue(H* queue ,void* itemPtr)
{
    node* deletecLoc;
    if (!queue->count)
        return false;
    *itemPtr = queue->front->dataPtr;
    deleteLoc = queue->front;
    if (queue->count == 1)
        queue->front = queue->rear = NULL;
    else
        queue->front = queue->front->next;
    (queue->count)--;
    free(deleteLoc);
    return true;
}

2 个答案:

答案 0 :(得分:2)

  

我想知道是否

if (queue->count == 0)
     可以使用

代替

if (!queue->count)

是的,您总是可以通过显式比较表达与零的隐式比较,反之亦然。

  

NULL0的使用方式是否相同?

在由ifwhile和其他控制语句执行的隐式比较为零的上下文中,与NULL的比较和与零的比较以相同的方式表现。

  

这是做什么的?

free(deleteLoc)

要理解这一点,您需要查看enqueue的代码并找到对malloccalloc的来电。实质上,freemalloc的“撤消”,告诉系统您不再使用动态分配给它的内存。

  

是否会消除deleteLoc包含的内存或queue->front

它可能会也可能不会更改deleteLoc指向的内存的内容,但这并不重要,因为该内存对您的程序不受限制:在调用{{1}后访问它是未定义的行为。

答案 1 :(得分:0)

if (queue->count == 0)将执行与if (!queue->count)完全相同的操作,因为在C中,如果某些内容求值为0,如果将其视为布尔值,则会将其计算为false

在这种情况下,是的,NULL0将实现同样的目标。 NULL指的是空指针,而0通常是数字零,但它们的计算结果相同。

最后,free将摆脱之前分配的内存。您没有显示所有代码,但在insert函数的某处,会有一个malloc(或类似函数)为您分配内存以存储您的节点。{{1摆脱了那个内存,你需要在完成一个节点后调用它。