使用循环队列,避免出现伪满队列的情况
- 判断队列为空的条件:rear == front;
- 判断队列为满的条件:(rear+1)%MAXSIZE == front;
空出一个数组元素空间,用以区别开来满队列和空队列。
一个顺序队列的结构:
typedef struct{
// 定义一个数组用来存储所有的数据元素
Element data[MAXSIZE];
// 第一个元素下标
int front;
// 最后一个元素的下标
int rear;
}SqQueue;
对顺序队列的操作:
// 初始化一个线性表
SqQueue* InitSQueue(){
SqQueue *sq = (SqQueue *)malloc(sizeof(SqQueue));
if(!sq){
exit(0);
}
sq->front = 0;
sq->rear = 0;
return sq;
}
// 判断是否为空的队列
bool SQueueEmpty(SqQueue *sq){
return sq->rear == sq->front;
}
// 是否为满的队列
bool SQueueFull(SqQueue *sq){
return (sq->rear+1)%MAXSIZE == sq->front;
}
Status EnSQueue(SqQueue *sq,Element v){
// 判断队列是否已满
if(SQueueFull(sq)){
return ER