首先因为它不存在队满的情况,所以不用考虑返回真假值,故用void
void DestroyQueue(LinkQueue*&q)
如果首结点不为空,就可以把它释放掉
所以可以写出
DataNode *pre=q->front;
if(pre!=NULL)
{
free(pre);
}
接着在看看pre的next
如果pre的next不为空,那么直接把pre指向的内容给释放掉,接着再把pre后移,再p移,最后再释放队列
DataNode *p;
if(pre!=NULL)
{
p=pre->next;
while(p!=NULL) //注意这里是while,p后面还有结点的话,就继续循环
{
free(pre);
pre=p;
p=p->next;
}
free(pre); //当while结束时,p指向空,没有什么用了,但pre还有一个指向的结点没有在while中被释放,所以要加这个
}
free(q); //释放队列