#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<stdbool.h>
#define MAXQSIZE 100
#define Status int
//创建一个结构体
typedef struct
{
int *base; //首地址
int front; //头指针
int rear; //尾指针
}SqQueue;
//队列初始化
Status initQueue(SqQueue *Q)
{
Q->base =(int*)malloc(MAXQSIZE*sizeof(int)); //分配内存空间
if(!Q->base) exit(0);
Q->front =0;
Q->rear =0;
}
//求队列的长度
Status QueueLength(SqQueue Q)
{
int length;
length=(Q.rear -Q.front +MAXQSIZE)%MAXQSIZE;
return length;
}
//入队
Status inQueue(SqQueue *Q,int a) //在队尾插入元素
{
if((Q->rear +1)%MAXQSIZE==Q->front ) printf("队列已经满了");
Q->base[Q->rear]=a;
Q->rear=(Q->rear +1)%MAXQSIZE;
printf("入队成功\n");
return 0;
}
//出队
Status outQueue(SqQueue *Q,int x) //删除队头的元素并且保存在x中
{
if(Q->rear ==Q->front ) printf("队列空\n");//判断是否队空
x=Q->base[Q->front];
Q->front=(Q->front +1)%MAXQSIZE;
return 0;
}
//判断队列是否为空
bool IsQueue(SqQueue Q)
{
return(Q.front==Q.rear);
}
//输出队列内容
Status Delete(SqQueue Q)
{
if( IsQueue(Q) )
printf("队列空\n");
else
{
printf("输出元素为%d ",Q.base[Q.front]);
Q.front=(Q.front+1) % MAXQSIZE;
printf("此时头结点位置为%d,尾结点%d\n",Q.front,Q.rear) ;
}
}
//主函数
int main()
{
int a,b,c,d,i;
SqQueue Q;
initQueue(&Q);
a=QueueLength(Q);
printf("队列的长度为:%d\n",a);
printf("需要入队几个元素:");
scanf("%d",&b);
for(i=0;i<b;i++)
{
scanf("%d",&d);
inQueue(&Q,d);
}
a=QueueLength( Q);
printf("入队完成后队列的长度为:%d\n",a);
printf("出队元素为:\n");
while(!(Q.front ==Q.rear ) )
{
int x;
Delete(Q);
outQueue( &Q, x);
}
return 0;
}