循环队列的基本操作
1.定义循环队列
typedef struct
{
int data[MAXQSIZE];
int rear;
int front;
}SqQueue;
2.初始化队列
int InitQueue(SqQueue *q)
{
q->front=0;
q->rear=0;
return 1;
}
3.出队
int PushQueue(SqQueue *q,int x)
{
if((q->rear+1)%MAXQSIZE==q->front)
return 0;
q->data[q->rear]=x;
q->rear=(q->rear+1)%MAXQSIZE;
return 1;
}
4.入队
int PopQueue(SqQueue *q,int *x)
{
if(q->rear==q->front) return 0;
*x=q->data[q->front];
q->front=(q->front+1)%MAXQSIZE;
return 1;
}
5.判断队空
int EmptyQueue(SqQueue *q)
{
if(q->front==q->rear) return 1;
return 0;
}
6.取队头元素
int Gethead(SqQueue *q)
{
if(EmptyQueue(q)) return 0;
return q->data[q->front];
}
完整程序实现
#include <stdio.h>
#include <stdlib.h>
#define MAXQSIZE 100
typedef struct
{
int data[MAXQSIZE];
int rear;
int front;
}SqQueue;
int InitQueue(SqQueue *q)
{
q->front=0;
q->rear=0;
return 1;
}
int PushQueue(SqQueue *q,int x)
{
if((q->rear+1)%MAXQSIZE==q->front)
return 0;
q->data[q->rear]=x;
q->rear=(q->rear+1)%MAXQSIZE;
return 1;
}
int PopQueue(SqQueue *q,int *x)
{
if(q->rear==q->front) return 0;
*x=q->data[q->front];
q->front=(q->front+1)%MAXQSIZE;
return 1;
}
int EmptyQueue(SqQueue *q)
{
if(q->front==q->rear) return 1;
return 0;
}
int Gethead(SqQueue *q)
{
if(EmptyQueue(q)) return 0;
return q->data[q->front];
}
int main()
{
int x;
SqQueue q;
InitQueue(&q);
while(~scanf("%d",&x)&&x)
{
PushQueue(&q,x);
}
while(!EmptyQueue(&q))
{
PopQueue(&q,&x);
printf("%d ",x);
}
return 0;
}
输入
1 2 3 4 5 6 7 8 9 0
输出
1 2 3 4 5 6 7 8 9
国庆节又懒了