参考《数据结构(C语言版)》- 严蔚敏 吴伟民 - 清华大学出版社
链队列的结构定义
typedef struct QNode //单个结点的结构
{
QElemType data; //数据
struct QNode *next; //下一个结点位置
}QNode, *QueuePtr;
typedef struct //队列结构
{
QueuePtr front; //头指针
QueuePtr rear; //尾指针
}LinkQueue; //带头结点的链队列
链队列初始化
void InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode)); //指针都指向头结点
if (!Q.front)
exit(0);
Q.front->next = NULL;
}
清除队列
void DestroyQueue(LinkQueue &Q)
{
while (Q.front) //从第一个结点开始到最后一个结点
{
Q.rear = Q.front->next; //每次尾指针指向头指针的下一个
free(Q.front); //释放当前头指针指向的结点空间
Q.front = Q.rear; //再到下一个结点
}
}
队列判空
bool QueueEmpty(LinkQueue Q)
{
if (Q.front == Q.rear) //如果头指针和尾指针指向同一结点,则队列为空
return true;
return false;
}