(初始)front==rear
(终止)front==rear
牺牲掉队列中一个空间,来去标识队列为满或空
判断逻辑如下:
队空:front==rear
队满:rear+1%MAXSIZE==front
1、初始化队列
2、入队
3、出队
4、遍历循环队列
(判断队列有多少个元素):(rear-front+MAXSIZE)%MAXSIZE
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 5
typedef struct Queue{
int front;
int rear;
int data[MAXSIZE];
}Queue;
Queue* initQueue(){
Queue* Q=(Queue*)malloc(sizeof(Queue));
Q->front=Q->rear=0;
return Q;
}
int isFull(Queue* Q){
if((Q->rear+1)%MAXSIZE==Q->front)
return 1;
else
return 0;
}
int enQueue(Queue* Q,int data){
if(isFull(Q))
return 0;
else{
Q->data[Q->rear]=data;
Q->rear=(Q->rear+1)%MAXSIZE;
return 1;
}
}
int isEmpty(Queue* Q){
if(Q->front==Q->rear)
return 1;
else
return 0;
}
int deQueue(Queue* Q){
if(isEmpty(Q))
return -1;
else{
int data=Q->data[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return data;
}
}
void printfQueue(Queue* Q){
int length=(Q->rear-Q->front+MAXSIZE)%MAXSIZE;
int index=Q->front;
for(int i=0;i<length;i++){
printf("%d-> ",Q->data[index]);
index=(index+1)%MAXSIZE;
}
printf("NULL\n");
// 要知道当前队列有多少个元素
}
int main()
{
Queue* Q=initQueue();
enQueue(Q,1);
enQueue(Q,2);
enQueue(Q,3);
enQueue(Q,4);
printfQueue(Q);
deQueue(Q);
printfQueue(Q);
return 0;
}