数据结构------队列
队列(Queue)概念
队列(Queue):具有一定操作约束的线性表
插入和删除操作:只能在一端插入,而在另一端删除
数据插入:入队列(AddQ)
数据删除:出队列(DeleteQ)
先来先服务
先进先出:FIFO
队列的抽象数据类型描述
类型名称:队列(Queue)
数据对象集:一个有0个或多个元素的有穷线性表
操作集:长度为MaxSize的队列 Q ∈ \in ∈Queue,队列元素item ∈ \in ∈ ElementType
队列的顺序存储实现
队列的顺序存储结构通常由一个一维数组和一个记录队列头元素位置的变量 front 以及一个记录队列尾元素位置的变量 rear 组成。
c
#define MaxSize <存储数据元素的最大个数>
struct QNode {
ElementType Data[MaxSize];
int rear; //指向队列尾部
int front; //指向队列头部
};
typedef struct QNode *Queue;

当front和Rear都为 -1的时候,队列为空。

正常运行中的队列,front指向第一个元素的前一格,Rear指向队列最后一个元素。
出队列,front++
入队列,rear++
循环队列

Front == Rear时,队列为空
出队列,front++
入队列,rear++

(PtrQ->rear + 1)%MaxSize == PtrQ->front时,队列为满
循环队列入队列
c
void AddQ(Queue PtrQ, ElementType item)
{
if((PtrQ->rear+1)%MaxSize == PtrQ->front){
printf("队列满");
return;
}
PtrQ->rear = (PtrQ->rear+1)%MaxSize;
PtrQ->Data[PtrQ->rear] = item;
}
循环队列出队列
c
ElementType DeleteQ( Queue PtrQ )
{
if ( PtrQ->front == PtrQ->rear ) {
printf("队列空");
return ERROR;
}
else {
PtrQ->front = (PtrQ->front + 1) % MaxSize;
return PtrQ->Data[PtrQ->front];
}
}