循环队列进队出队两个判断条件
1.队空Q.front==Q.rear
2.队满Q.front == (Q.rear + 1) % MaxSize
%在这里是取余运算,例如x%9=(0,1,2,3,4,8) 这样可以将结果头尾相接
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MaxSize 5
typedef int Element;
typedef struct Duilie {
Element data[MaxSize]; //建立队列
int front;
int rear;
}Seque;
bool InitQueue(Seque &Q) { //初始化循环队列,让头指针尾指针都指向0
Q.front = Q.rear = 0;
return true;
}
bool EnQueue(Seque& Q, Element &x) {
if (Q.front == (Q.rear + 1) % MaxSize) { //入队先判断,队列是否满了,队满条件:Q.front == (Q.rear + 1) % MaxSize
printf("false\n");
return false;
}
Q.data[Q.rear] = x; //1.先入对
Q.rear = (Q.rear + 1) % MaxSize; //2.队尾指针向后移位
return true;
}
bool PrintfQ(Seque Q) {
if (Q.front == (Q.rear + 1) % MaxSize) { //队满停止打印
for (int i = Q.front; i < 4; i++) {
printf(" %d ", Q.data[i]);
}
}
return true;
}
int main() {
Seque Q ;
InitQueue(Q);
int a, b, c, d, e;
scanf("%d", &a);
scanf("%d", &b);
scanf("%d", &c);
scanf("%d", &d);
scanf("%d", &e);
EnQueue(Q, a);
EnQueue(Q, b);
EnQueue(Q, c);
EnQueue(Q, d);
EnQueue(Q, e);
PrintfQ(Q);
return 0;
}