#include<stdio.h>
#include<stdlib.h>
typedef struct
{
char *elem;
int max_size;
int f;
int r;
}SqQueue;
void main()
{
void init(SqQueue &q,int n);
void enQueue(SqQueue &q,char e);
void dlQueue(SqQueue &q,char &e);
int empty(SqQueue &q);
int full(SqQueue &q);
int n;
char e;
SqQueue q;
printf("请输入队列的容量n:");
scanf("%d",&n);
init(q,n);
printf("请输入字符('#'执行一次出队操作,'@'所有元素出队,其他元素入队):");
scanf(" %c",&e);
while(1)
{
if(e=='#')
{
dlQueue(q,e);
printf("出队字符为:%c \n",e);
}
else if(e=='@')
{
printf("出队字符为:");
do
{
dlQueue(q,e);
printf("%c ",e);
}while(!empty(q));
printf("\n");
}
else
{
enQueue(q,e);
}
printf("请输入字符('#'执行一次出队操作,'@'所有元素出队,其他元素入队):");
scanf(" %c",&e);
}
}
void init(SqQueue &q,int n)
{
q.f=q.r=0;
q.max_size=n+1;
if(!(q.elem=(char *)malloc(sizeof(char)*(n+1))))exit(-1);
}
int empty(SqQueue &q)
{
return q.r==q.f;
}
int full(SqQueue &q)
{
return (q.r+1)%q.max_size==q.f;
}
void enQueue(SqQueue &q,char e)
{
int full(SqQueue &q);
if(full(q))
{
printf("ERROR!队满\n");
exit(-1);
}
q.r=(q.r+1)%q.max_size;
q.elem[q.r]=e;
}
void dlQueue(SqQueue &q,char &e)
{
int empty(SqQueue &q);
if(empty(q))
{
printf("ERROR!队空\n");
exit(-1);
}
q.f=(q.f+1)%q.max_size;
e=q.elem[q.f];
}