#include <stdio.h>
//队列 FIFO 先进先出
//队头(队首)Front 允许删除的一端 (先出去)
//队尾rear 允许插入的一段
#define MaxSize 50
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];//存储MaxSize-1 个元素 循环队列要牺牲一个存储单元
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 e)
{
if((Q.rear+1)%MaxSize==Q.front)
{
return false;
}
Q.data[Q.rear]=e;
Q.rear=(Q.rear+1)%MaxSize;//这里只会最大到max-1,因此,若到达这个位置,rear会回到起始位置,不出队,下一次再加入元素会return false
return true;
}
bool DeQueue(SqQueue &Q,ElemType &e)
{//出队,从第一个进来的元素开始删
if(isEmpty(Q))
{
return false;
}
e=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
return true;
}
int main() {
SqQueue Q;
InitQueue(Q);
bool ret= isEmpty(Q);
if(ret){
printf("Q is Empty\n");
}else{
printf("Q is not Empty");
}
ElemType e;//存储出队元素
EnQueue(Q,2);
EnQueue(Q,5);
EnQueue(Q,4);
EnQueue(Q,1);
//超出范围会失败
for (int i = 0; i < 5; i++) {
ret=DeQueue(Q,e);
if(ret)
{
printf(" i=%d del is %d\n", i,e);
}else
{
printf(" i=%d del is failed\n", i);
}
}
return 0;
}
C:循环队列Queue
于 2024-03-15 13:37:26 首次发布