#include <stdio.h>//循环队列
#define MAXSIZE 5
typedef struct queue
{
int front;//队列中第一个元素的位置
int rear;//下一个要插入元素(节点)的位置
int data[MAXSIZE];//数据域
}Queue;
Queue* initQueue()//添加空队列
{
Queue* Q=(Queue*)malloc(sizeof(Queue));
Q->front=Q->rear=0;
return Q;
}
int isFull(Queue* Q)//判断是否已经满队了
{
if((Q->rear+1)%MAXSIZE==Q->front)
{
return 1;
}
else
return 0;
}
int enQueue(Queue* Q,int data)//进队
{
if(isFull(Q))
{
return 0;
}
else
{
Q->data[Q->rear]=data;
Q->rear=(Q->rear+1)%MAXSIZE;//循环队列的操作
return 1;
}
}
int isEmpty(Queue* Q)//判断是否为空队列
{
if(Q->rear==Q->front)
{
return 1;
}
else
return 0;
}
int deQueue(Queue* Q)//出队
{
int data;
if(isEmpty(Q))
{
return -1;
}
else
{
data=Q->front[Q->data];
Q->front=(Q->front+1)%MAXSIZE;
return data;
}
}
void printQueue(Queue* Q)//输出队列元素
{
//int len=Q->rear-Q->front;//Q->rear未到最后一个空节点前(即队列未满时可用),不建议先使用
int len=(Q->rear-Q->front+MAXSIZE)%MAXSIZE;//取余可以将负数变为正数,队列满时也可以算出正数,建议使用
int index=Q->front;
for(int i=0;i<len;i++)
{
printf("%d->",Q->data[index]);
index=(index+1)%MAXSIZE;
}
printf("NULL\n");
}
void printQSituation(Queue* Q)//判断是否已满队
{
int i=isFull(Q);
if(i==1)
printf("队列已满\n");
else
printf("队列还未满\n");
}
int main()
{
int chudui=0;
Queue* Q=initQueue();
enQueue(Q,1);
enQueue(Q,2);
enQueue(Q,3);
printQSituation(Q);
printQueue(Q);
enQueue(Q,4);
printQSituation(Q);
printQueue(Q);
chudui=deQueue(Q);
printf("出队元素为:%d\n",chudui);
printQueue(Q);
return 0;
}
NO.27 有问题评论区见!🌷
<C语言数据结构>