#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 5
typedef int ElemType;
typedef struct SqQueue {//当结构体内不含有指针的时候可以省略前面的SqQueue
ElemType data[MaxSize];//数组存储MaxSize-1个元素,牺牲一个单元来区分对空和队满
int front;//头伪指针
int rear;//尾伪指针
}SqQueue;
//循环队列初始化
void InitQueue(SqQueue& Q) {
Q.front = Q.rear = 0;
}
//判断队列是否为空
bool EmptySqQ(SqQueue Q) {
if (Q.front == Q.rear) {
return true;
}
return false;
}
//入队(从尾部入队)
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;//向后移动一格,始终指向尾部后的空元素,方便下一个入队元素直接进入空位
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;
int x;//存放弹出值
bool ret;//存放返回值
ElemType element;//存储出队元素
InitQueue(Q);//初始化
ret = EmptySqQ(Q);
if (ret) {
printf("队列为空\n");
}
else {
printf("队列不为空\n");
}
Enqueue(Q, 2);
Enqueue(Q, 5);
Enqueue(Q, 1);
ret=DeQueue(Q, x);
if (ret) {
printf("弹出值为:%d\n",x);
}
else {
printf("GG\n");
}
return 0;
}
循环队列代码
最新推荐文章于 2024-04-24 16:06:48 发布