从队列中删除头元素

时间:2014-05-15 16:17:05

标签: c queue

我已声明如下结构:

struct example
{
      // some element here
      struct example *next;
};
struct example *head;

假设我已经从"示例"结构,现在我想移出head元素(当然,在队列中移出第一个元素之后我必须将它从队列中删除)。我删除了这样的代码:

void delete()
{
    struct example *temp = malloc (sizeof(struct example) * 1);
    temp = head;
    head = head->next;
    free(temp);
}

我的问题是功能"删除"做这些工作:

  1. 删除队列中的第一个元素,并使下一个元素成为新队列的头部
  2. 或2.它不删除队列中的第一个元素但是将head = head->下一个并删除" temp"指针和"老头"仍然存在于某处

1 个答案:

答案 0 :(得分:2)

您实际上正确地将head设置为队列中的下一个项目删除旧头。 然而,似乎没有理由,你使用malloc()来创建内存,然后在下一行覆盖temp时丢失唯一的指针。您应该将temp初始化为headmalloc()函数中不需要delete()内存。如果确实需要malloc(),请注意* 1是多余且不必要的。

此外,如果您的队列为空且headNULL,会发生什么?想一想。

您的队列是否有效还有待观察,因为您还需要一个tail指针来了解将新项目添加到队列的位置。

此外,我会避免命名函数delete(),因为它可能会与C ++关键字delete混淆。 remove()会更合适。