# include <stdio.h>
# include <malloc.h>
/*
循环队列:
入队时:rear = (rear+1)%数组的长度
出队时:front = (front+1)%数组的长度
队列为空时:rear == front
队列满时:(rear+1)%数组的长度 == front
*/
typedef struct Queue {
int * pBase; //用于存放数组
int front; //头
int rear; //尾
}QUEUE, * PQUEUE;
void init(PQUEUE); //队列初始化
bool en_queue(PQUEUE, int); //入队
void print_queue(PQUEUE); //遍历
bool is_full(PQUEUE);// 队列是否满
bool is_empty(PQUEUE); //队列是否为空
bool out_queue(PQUEUE); //出队
int main(void) {
//初始化
QUEUE Q;
init(&Q);
//入队
if(en_queue(&Q,1)){
printf("入队成功!\n");
}else {
printf("入队失败!\n");
}
if(en_queue(&Q,2)){
printf("入队成功!\n");
}else {
printf("入队失败!\n");
}
if(en_queue(&Q,3)){
printf("入队成功!\n");
}else {
printf("入队失败!\n");
}
//打印
printf("\n打印:\n");
print_queue(&Q);
//出队
printf("\n");
if(out_queue(&Q)) {
printf("出队成功!\n");
printf("打印:\n");
print_queue(&Q);
}else {
printf("出队失败!\n");
}
return 0;
}
//队列初始化
void init(PQUEUE pQ) {
pQ->pBase = (int *)malloc(sizeof(int) * 6); //创建数组
pQ->front = 0;
pQ->rear = 0;
}
//判断队列是否满
bool is_full(PQUEUE pQ) {
if( (pQ->rear + 1) % 6 == pQ->front ) {
return true;
}else {
return false;
}
}
//判断队列是否为空
bool is_empty(PQUEUE pQ) {
if(pQ->front == pQ->rear) {
return true;
}else {
return false;
}
}
//入队
bool en_queue(PQUEUE pQ, int val) {
if(is_full(pQ)) {
return false;
}else {
pQ->pBase[pQ->rear] = val; //入队
pQ->rear = (pQ->rear+1) % 6; // rear = (rear+1)%数组的长度
return true;
}
}
//遍历队列
void print_queue(PQUEUE pQ) {
int i = pQ->front;
while(i != pQ->rear) {
printf("%d\t",pQ->pBase[i]);
i = (i+1) % 6;
}
printf("\n");
}
//出队
bool out_queue(PQUEUE pQ) {
if(is_empty(pQ)){
return false;
}else {
int * p = &(pQ->pBase[pQ->front]);
pQ->front = (pQ->front+1) % 6;
*p = NULL;
return true;
}
}
结果: