#include <stdio.h>
#include <conio.h>
#define MAX 10 // Changing this value will change length of array
int queue[MAX];
int front = -1, rear = -1;

void insert(void);
int delete_element(void);
int peek(void);
void display(void);

int main()
{
	int option, val;
	do
	{
		printf("\n\n ***** MAIN MENU *****");
		printf("\n 1. Insert an element");
		printf("\n 2. Delete an element");
		printf("\n 3. Peek");
		printf("\n 4. Display the queue");
		printf("\n 5. EXIT");
		printf("\n Enter your option : ");
		scanf("%d", &option);
		switch(option)
		{
			case 1:
				insert();
				break;
			case 2:
				val = delete_element();
				if (val != -1)
					printf("\n The number deleted is : %d", val);
				break;
			case 3:
				val = peek();
				if (val != -1)
					printf("\n The first value in queue is : %d", val);
				break;
			case 4:
				display();
				break;
			}
	}while(option != 5);
	getch();
	return 0;
}

void insert()
{
	int num;
	printf("\n Enter the number to be inserted in the queue : ");
	scanf("%d", &num);
	if(rear == MAX-1) {
		printf("\n OVERFLOW");
		return;
	}
	else if(front == -1 && rear == -1)
		front = rear = 0;
	else
		rear++;
	queue[rear] = num;
}

int delete_element()
{
	int val;
	if(front == -1 || front>rear)
	{
		printf("\n UNDERFLOW");
		return -1;
	}
	else
	{
		val = queue[front];
		front++;
		if(front > rear)
		front = rear = -1;
		return val;
	}
}

int peek()
{
	if(front==-1 || front>rear)
	{
		printf("\n QUEUE IS EMPTY");
		return -1;
	}
	else
	{
		return queue[front];
	}
}

void display()
{
	int i;
	printf("\n");
	if(front == -1 || front > rear)
		printf("\n QUEUE IS EMPTY");
	else
	{
		for(i = front;i <= rear;i++)
			printf("\t %d", queue[i]);
	}
}