链队列
队列的链式存储结构简称为链队列,它是限制仅在表头删除和表尾插入的单链表。
显然仅有单链表的头指针不便于在表尾做插入操作,为此再增加一个尾指针,指向链表的最后一个结点。于是,一个链队列由一个头指针唯一确定。
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define error(s) printf("%s", s)
typedef char datatype;
typedef struct queuenode
{
datatype data;
struct queuenode *next;
}Qnode;
typedef struct
{
Qnode *front;
Qnode *rear;
}linkqueue;
//初始化队列
void InitQueue(linkqueue *q)
{
q->front = q->rear = NULL;
}
//判断队列为空,因为不是用数组来存储队列,而是用堆来管理队列,所以队列不会‘上溢’
int QueueEmpty(linkqueue *q)
{
return ((q->front == NULL) &&(q->rear ==NULL));
}
//入队
void EnQueue(linkqueue *q, datatype x)
{
Qnode *p;
p = (Qnode *)malloc(sizeof(Qnode));
assert(p != NULL);
p->data = x;
p->next = NULL;
//队列为空的情况