#include <stdio.h>
// 循环队列
#define MaxSize 5
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
int front, rear; // 队列头 队列尾
}SqQueue;
// 初始化循环队列
void InitQueue(SqQueue &Q){
Q.front = Q.rear = 0; // 让头和尾都指向零号元素
}
// 判断循环队列是否为空
bool isEmpty(SqQueue Q){
return Q.rear == Q.front;
}
// 入队
bool EnQueue(SqQueue &Q, ElemType x){
if((Q.rear+1)%MaxSize == Q.front){ // 判断循环队列是否满了,满了则不能入队
return false;
}
Q.data[Q.rear] = x;
Q.rear = (Q.rear+1)%MaxSize; // rear要加1,如果大于数组最大下标,回到开头
return true;
}
// 出队
bool DeQueue(SqQueue &Q, ElemType &x){
if(Q.rear == Q.front){ // 队列为空,无法出队
return false;
}
x = Q.data[Q.front]; // 从头出队
Q.front = (Q.front+1)%MaxSize;
return true;
}
int main(){
SqQueue Q;
// 初始化循环队列
InitQueue(Q);
bool ret;
// 判断循环队列是否为空
ret = isEmpty(Q);
if(ret){
printf("SqQueue is empty\n");
}else{
printf("SqQueue is not empty\n");
}
// 入队
EnQueue(Q,3);
EnQueue(Q,4);
EnQueue(Q,5);
ret = EnQueue(Q,6);
ret = EnQueue(Q,7);
if(ret){
printf("EnQueue success\n");
}else{
printf("EnQueue failed\n");
}
// 出队
ElemType element; // 存储出队元素
ret = DeQueue(Q,element);
if(ret){
printf("DeQueue success\n");
}else{
printf("DeQueue failed\n");
}
ret = EnQueue(Q,8);
if(ret){
printf("EnQueue success\n");
}else{
printf("EnQueue failed\n");
}
return 0;
}
【数据结构】循环队列
最新推荐文章于 2024-07-25 19:28:17 发布