typdef struct QNode{
ElemType data;
struct QNode *next;
}QNode, *QueuePrt;
typdef struct{
QueuePrt front,rear; //队头,队尾指针
}LinkQueue; //将队头指针指向链队列的头结点,队尾指针指向终端节点(头结点不是必要的,加上方便操作)
空队列时,front和rear都指向头结点
//创建一个队列
initQueue(LinkQueue *q){
q->front = q->rear = (QueuePtr)malloc(sizeof(QNode));
if(!q->front)
exit(0);
q->front->next = NULL;
}
//入队列
InsertQueue(LinkQueue *q, ElemType e){
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode)); //申请(QueuePtr指针)格式节点,大小为QNode
if(p == NULL)
exit(0);
p->data = e;
p->next = NULL;
q->rear->next = p; //将队尾元素p填充到之前rear的下一个
q->rear = p; //将队尾指针后移下一个
}
//出队列操作
DeleteQueue(LinkQueue *q, ElemType *e){
QueuePtr p;
if(q->front == q->rear)
return;
p = q->front->next; //指向第一个节点
*e = p->data;
q->front->next = p->next;
if(q->rear == p) //只有一个节点,释放后为空队列
q->rear = q->front;
free(p);
}
销毁一个队列
DestroyQueue(LinkQueue *q){
while(q->front){
q->rear = q->front->next; //尾部指针指向第二个元素内存
free(q->front); //销毁第一个元素内存
q->front = q->rear; //第一个指针指向之前的第二个元素内存
}
}