#include <stdio.h>
#include <stdlib.h>
 
int array[10];
 
int size = sizeof(array) / sizeof(array[0]);
 
 
int front = -1;
int rear = -1;
int count = 0;
 
 
void enqueue()
{
    rear++;
    printf("Enter the eleemnt to insert:\n");
    scanf("%d", &array[rear]);
 
    if (front == -1)
    {
        front++;
    }
 
}
 
void dequeue()
{
    front++; // 1 2 3 4
    
    if (front > rear)
    {
        printf("queue is empty!\n");
        front = -1;
        rear = -1;
    }
 
}
 
void display()
 
{
    if (rear == -1)
    {
        printf("queue is empty!\n");
    }
   
    else
    {
        printf("the queue:\n");
 
        for (int i = front; i <= rear; i++)
        {
            printf("%d, ", array[i]);
        }
    }
    
    printf("\n");
}
 
void isempty()
{
    if(rear==-1)
    {
        printf("queue is empty!\n");
    }
    else
    {
        printf("Queue is not empty!\n");
    }
 
}
 
void isfull()
{
    if(rear>=size)
    {
        printf("list is full!\n");
    }
 
    else
    {
        printf("list is not full!\n");
    }
 
}
 
 
void showrear()
{
    printf("the rear element is %d\n", array[rear]);
}
 
void showfront()
{
    printf("the front element is %d\n", array[front]);
}
 
 
void size()
{
    for(int i=front;i<=rear;i++)
    
    {
        count++;
    }
    
    printf("there are %d elements in queue!\n", count);
    
}
 
 
 
int main()
 
{
 
    // FIFO
 
    // First in first out
 
    // 1 2 3 4 5
 
    // insert
 
    int ch;
 
    while (1)
 
    {
 
        printf("Enter choice:\n1. enqueue\n2. dequeue\n3. display\n4. reverse\n5. size\n6. isempty\n7. isfull\n8. show front\n9. show rear\n10. count elements\n11. exit\n");
 
        scanf("%d", &ch);
 
        switch (ch)
 
        {
 
        case 1:
 
            enqueue();
 
            break;
 
        case 2:
 
            dequeue();
 
            break;
 
        case 3:
 
            display();
 
            break;
 
        case 4:
 
            reverse();
 
            break;
 
        case 5:
 
            size();
 
            break;
 
        case 6:
 
            isempty();
 
            break;
 
        case 7:
 
            isfull();
 
            break;
 
        case 8:
 
            showfront();
 
            break;
 
        case 9:
 
            showrear();
 
            break;
 
        case 10:
 
            exit(0);
 
            break;
 
  
 
        default:
 
            break;
 
        }
 
    }
 
  
 
    return 0;
 
}