我已声明如下结构:
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);
}
我的问题是功能"删除"做这些工作:
或2.它不删除队列中的第一个元素但是将head = head->下一个并删除" temp"指针和"老头"仍然存在于某处
答案 0 :(得分:2)
您实际上正确地将head
设置为队列中的下一个项目并删除旧头。 然而,似乎没有理由,你使用malloc()
来创建内存,然后在下一行覆盖temp
时丢失唯一的指针。您应该将temp
初始化为head
。 malloc()
函数中不需要delete()
内存。如果确实需要malloc()
,请注意* 1
是多余且不必要的。
此外,如果您的队列为空且head
为NULL
,会发生什么?想一想。
您的队列是否有效还有待观察,因为您还需要一个tail
指针来了解将新项目添加到队列的位置。
此外,我会避免命名函数delete()
,因为它可能会与C ++关键字delete
混淆。 remove()
会更合适。