#include <stdio.h>
#define MAXSIZE 100
typedef struct
{
char data[MAXSIZE];
int front, rear;
} SEQQUEUE;
void Init_Queue(SEQQUEUE *q)
{
q->front = 0;
q->rear = 0;
}
int Queue_Empty(SEQQUEUE *q)
{
if (q->front == q->rear)
return 1;
else
return 0;
}
void Add_Queue(SEQQUEUE *q, char x)
{
if ((q->rear + 1) % MAXSIZE == q->front)
printf("Queue full\n");
else
{
q->rear = (q->rear + 1) % MAXSIZE;
q->data[q->rear] = x;
}
}
char Gethead_Queue(SEQQUEUE *q)
{
if (Queue_Empty(q))
return '\0';
else
return q->data[(q->front + 1) % MAXSIZE];
}
char Del_Queue(SEQQUEUE *q)
{
char x;
if (Queue_Empty(q))
{
printf("Queue empty\n");
x = '\0';
}
else
{
q->front = (q->front + 1) % MAXSIZE;
x = q->data[q->front];
}
return x;
}
int QueueLength(SEQQUEUE *q)
{
int len;
len = (MAXSIZE + q->rear - q->front) % MAXSIZE;
return len;
}
int main()
{
SEQQUEUE queue, *q;
char ch;
q = &queue;
Init_Queue(q);
scanf("%c", &ch);
while (ch != '\n')
{
Add_Queue(q, ch);
scanf("%c", &ch);
}
printf("%d\n", QueueLength(q));
while(!Queue_Empty(q))
{
ch = Gethead_Queue(q);
printf("%c", ch);
Del_Queue(q);
}
return 0;
}