队列(Queue):具有一定操作约束的线性表
插入和删除操作:只能在一端插入,而在另一端删除。
数据插入:入队列(AddQ)
数据删除:出队列(DeleteQ)
先进先服务
先进先出:FIFO
类型名称:队列(Queue)
数据对象集:一个有0个或多个元素的有穷线性表
操作集:长度为MaxSize的队列Q∈Queue,队列元素item∈ElementType
Queue CreatQueue(int MaxSize):生成长度为MaxSize的空队列;int IsFullQ(Queue Q,int MaxSize):判断队列Q是否已满;void AddQ(Queue Q,ElementType item):将数据元素item插入队列Q中;int IsEmptyQ(Queue Q):判断队列Q是否为空;ElementType DeleteQ(Queue Q):将队头数据元素从队列中删除并返回。队列的顺序存储结构通常由一个一维数组和一个记录队列头元素位置的变量front以及一个记录队列尾位置的变量rear组成。
#define MaxSize <存储数据元素的最大个数> struct QNode{ ElementType Data[MaxSize]; int rear; int front; }; typedef struct QNode *Queue;解决循环队列无法判断是否满队或者全空的两种方案: ① 设置一个标志位 ② 空出一个位置不用
队列的链式存储结构也可以用一个单链表实现,插入和删除操作分别在链表的两头进行;
struct Node{ ElementType Data; struct Node *Next; }; struct QNode{ /* 链队列结构 */ struct Node *rear; /* 指向队尾结点 */ struct Node *front; /* 指向队头结点 */ }; typedef struct QNode *Queue; Queue PtrQ;