3.2.1 队列的基本概念
回顾:数据结构三要素:逻辑结构、存储结构、数据运算
线性表:具有相同数据类型的 n 个数据元素的有限序列,其中 n 为表长
栈(Stack):只允许在一端进行插入或者删除操作的线性表
队列(Queue):只允许在一端进行插入,另一端删除的线性表
特点:先入先出(FIFO)
重要术语:队头、队尾、空队列
- 队头:允许删除的一端
- 队尾:允许插入的一端
(尾插头删)
3.2.2 队列的顺序实现
基本操作:创、增、删、查(队头元素)、判空判满(增删查前必要判断)
1、创
静态数组存放队列元素
队头、队尾两个指针
- 队头指针:指向队头元素
- 队尾指针:指向队尾元素的后一个位置(下一个应该插入的位置)
//队列的顺序实现
#define MaxSize 10
typedef struct{
ElemType data[MaxSize]; //静态数组存放队列元素
int front,rear; //队头和队尾指针
}SqQueue;
2、初始化
初始时队头、队尾指针指向0
//初始化队列
void InitQueue(SqQueue &Q){
//初始时队头、队尾指针指向0
Q.rear=Q.front=0;
}
3、判空判满
- 判空
bool QueueEmpty(SqQueue Q)
//判空操作
bool QueueEmpty(SqQueue Q) //判断不变化,则不需要传址
{
if(Q.rear==Q.front) //队空条件
return true;
else
return false;
}
- 判满
循环队列:用模运算将存储空间在逻辑上变成了环状
Q.data[Q.rear]=x; //新元素插入队尾
Q.rear=(Q.rear+1)%Ma