#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define QueueSize 100
typedef char DataType;
typedef struct cirqueue
{
DataType data[QueueSize];
int front;
int rear;
}CirQueue;
CirQueue *q;
//置队空
void lnitqueue(CirQueue *q)
{
q->front=q->rear=0;
}
//判队空
int queueempty(CirQueue *q)
{
return q->front==q->rear;
}
//判队满
int queuefull(CirQueue *q)
{
return q->front==q->rear+1;
}
//入队
void enqueue(CirQueue *q,DataType x)
{
if(queuefull(q))
{puts("??");exit(0);}
q->data[q->rear]=x;
q->rear=(q->rear+1)%QueueSize;
}
//出队
DataType dequeue(CirQueue *q)
{
DataType temp;
if(queueempty(q))
{puts("??");exit(0);}
temp=q->data[q->front];
q->front=(q->front+1)%QueueSize;
return temp;
}
//取队头元素
DataType queuefront(CirQueue *q)
{
if(queueempty(q))
{puts("??");exit(0);}
return q->data[q->front];
}
void menu()
{
printf("/n/t/t*/t 1. 置队空/t/t *");
printf("/n/t/t*/t 2. 判队空/t/t *");
printf("/n/t/t*/t 3. 判队满/t/t *");
printf("/n/t/t*/t 4. 进 队/t/t *");
printf("/n/t/t*/t 5. 退 队/t/t *");
printf("/n/t/t*/t 6.取队头元素/t/t *");
printf("/n/t/t*/t 7.退出 系统/t/t */n");
}
void main()
{
DataType x;
char ch;
q=(CirQueue *)malloc(sizeof(CirQueue));
lnitqueue(q);
while(1)
{
system("cls");
menu();
printf("按照提示操作:");
ch=getchar();
switch(ch)
{
case '1':lnitqueue(q);break;
case '2':if(queueempty(q))
printf("队空");
else
getch();break;
case '3':if(queuefull(q)!=0)
printf("队满");
else
getch();break;
case '4': printf("请输入入队元素:");
getchar(); scanf("%c",&x);
enqueue(q,x);break;
case '5':printf("退队元素为%c",dequeue(q));getch();break;
case '6':printf("取队头元素为%c",queuefront(q));getch();break;
case '7':printf("欢迎使用,谢谢!/n");exit(0);
}
}
}