队列 是一种 先进先出 的线性表。它只允许在表的一端进行插入,而在另一端删除元素。在队列中,允许插入的一端叫做 队尾,允许删除的一端称为 队头。
用链表表示的队列简称为 链队列,一个链队列显然需要两个分别指示队头和队尾的指针(分别称为头指针和尾指针)才能唯一确定。空的链队列的判决条件为头指针和尾指针均指向头结点。
链队列的模块说明:
// ===== ADT Queue 的表示与实现=====
// ----- 单链队列——队列的链式存储结构 -----
typedef struct QNode {
QElemType data;
struct QNode * next;
} QNode, * QueuePtr;
typedef struct {
QueuePtr front; // 队头指针
QueuePtr rear; // 队尾指针
} LinkQueue;
// ----- 基本操作的函数原型说明 -----
Status InitQueue (LinkQueue &Q)
// 构造一个空队列Q
Status DestroyQueue (LinkQueue &Q)
// 销毁队列Q,Q不在存在
Status ClearQueue (LinkQueue &Q)
// 将Q清为空队列
Status QueueEmpty (LinkQueue &Q)
// 若队列为空队列,则返回TRUE,否则返回FALSE
Status QueueLength (LinkQueue &Q)
// 返回Q的元素个数,即为队列的长度
Status GetHead (LinkQueue Q, QElemType &e)
// 若队列不空,则用e返回Q的队头元素,并返回OK;否则返回E