编译环境:VC++6.0
实现操作:循环队列初始化、判队空、入队、出队、获取队头元素以及输出队列元素
实现代码:
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 50
#define bool int
typedef struct
{
int data[MAXSIZE];
int front;
int rear;
}SqQueue;
void InitQueue(SqQueue *Q) //初始化队列
{
Q->front=Q->rear=0;
printf("队列初始化成功!\n");
}
bool QueueEmpty(SqQueue Q) //判队空
{
if(Q.front==Q.rear)
return 1;
else
return 0;
}
bool EnQueue(SqQueue *Q,int x) //入队
{
if((Q->rear+1)%MAXSIZE==Q->front)
return 0;
Q->data[Q->rear]=x;
Q->rear=(Q->rear+1)%MAXSIZE;
return 1;
}
bool DeQueue(SqQueue *Q,int *x) //出队
{
if(Q->front==Q->rear)
return 0;
*x=Q->data[Q->front];
Q->front=(Q->front+1)%MAXSIZE;
return 1;
}
int GetHead(SqQueue Q) //获取队头元素
{
if(Q.front==Q.rear)
return 0;
return Q.data[Q.front];
}
void display(SqQueue Q) //输出循环队列
{
int t=Q.front;
printf("当前循环队列是:");
while(t!=Q.rear)
{
printf("%d ",Q.data[t]);
t=(t+1)%MAXSIZE;
}
printf("\n");
}
int main()
{
SqQueue q;
int e,l;
InitQueue(&q);
printf("循环队列q是否为空:%d\n",QueueEmpty(q));
printf("请输入队列元素(输入-1表示结束):");
scanf("%d",&e);
while(e!=-1)
{
EnQueue(&q,e);
scanf("%d",&e);
}
display(q);
DeQueue(&q,&l);
printf("第一次出队的元素是:%d\n",l);
display(q);
DeQueue(&q,&l);
printf("第二次出队的元素是:%d\n",l);
display(q);
printf("队头元素是:%d\n",GetHead(q));
return 0;
}
程序运行结果展示: