{
printf( "队列为空,无法删除! ");
exit(1);
}
temp = hq- >front->data; /* 暂存队尾元素以便返回 */
p = hq- >front; /* 暂存队尾指针以便回收队尾结点 */
hq- >front = p->next; /* 使队首指针指向下一个结点 */
/* 若删除后链队为空,则需同时使队尾指针为空 */
if(hq- >front == NULL){
hq- >rear = NULL;
}
free(p); /* 回收原队首结点 */
return temp; /* 返回被删除的队首元素值 */
}
/* 4.读取队首元素 */
elemType peekQueue(struct queueLK *hq)
{
/* 若链队为空则停止运行 */
if(hq- >front == NULL){
printf( "队列为空,无法删除! ");
exit(1);
}
return hq- >front->data; /* 返回队首元素 */
}
/* 5.检查链队是否为空,若为空则返回1, 否则返回0 */
int emptyQueue(struct queueLK *hq)
{
/* 判断队首或队尾任一个指针是否为空即可 */
if(hq- >front == NULL){
return 1;
}else{
return 0;
}
}
/* 6.清除链队中的所有元素 */
void clearQueue(struct queueLK *hq)
{
struct sNode *p = hq- >front; /* 队首指针赋给p */
/* 依次删除队列中的每一个结点,最后使队首指针为空 */
while(p != NULL){
hq- >front = hq->front->next;
free(p);
p = hq- >front;
} /* 循环结束后队首指针已经为空 */
hq- >rear = NULL; /* 置队尾指针为空 */
return;
}
/*******************