//Author:张佳琪
//由于浪费一个空间用于判断满,所以队长最大为MAXSIZE-1
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 4
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
typedef int Status;
typedef int QElemType;
typedef struct SQueue
{
QElemType elem[MAXSIZE];
int front;
int rear;
}SQueue;
Status init(SQueue *q)
{
q->front=0;
q->rear=0;
return OK;
}
Status is_empty(SQueue *q)
{
if(q->front==q->rear)
return TRUE;
else
return FALSE;
}
Status is_full(SQueue *q)
{
if(q->front==(q->rear+1)%MAXSIZE)
return TRUE;
else
return FALSE;
}
Status insert(SQueue *q,QElemType x)
{
if(is_full(q))
return ERROR;
q->elem[q->rear]=x;
q->rear=(q->rear+1)%MAXSIZE;
return OK;
}
Status deleteq(SQueue *q,QElemType *x)
{
if(is_empty(q))
return ERROR;
*x=q->elem[q->front];
q->front=(q->front+1)%MAXSIZE;
return OK;
}
Status show(SQueue *q)
{
int i;
for(i=q->front;i<q->rear;i++)
printf("%d ",q->elem[i]);
printf("\n");
return OK;
}
int get_length(SQueue *q)
{
return (q->rear-q->front+MAXSIZE)%MAXSIZE;
}
int main()
{
QElemType x;
SQueue q;
int i;
while(1)
{
printf("=======menu=======\n");
printf("1.初始化\n");
printf("2.入队\n");
printf("3.出队\n");
printf("4.队长\n");
printf("5.输出\n");
printf("输入1-5:");
scanf("%d",&i);
switch(i)
{
case 1:
{
if(init(&q))
printf("完成\n");
else
printf("失败\n");
break;
}
case 2:
{
printf("输入数据:");
scanf("%d",&x);
if(insert(&q,x))
printf("完成\n");
else
printf("失败\n");
break;
}
case 3:
{
deleteq(&q,&x);
printf("%d\n",x);
break;
}
case 4:
{
printf("队长:\n");
printf("%d\n",get_length(&q));
break;
}
case 5:
{
show(&q);
break;
}
}
}
}