#include <stdio.h>
 
#include <stdlib.h>
 
struct node
{
    int data;
    struct node *next;
    
};
 
struct node *front = NULL;
struct node *rear = NULL;
 
void enqueue()
{
 
    struct node *newnode = (struct node*) malloc(sizeof(struct node));
 
    printf("Enter the data:\n");
 
    scanf("%d", &newnode->data);
 
    if(front == NULL)
    {
        newnode->next = NULL;
 
        front = newnode;
 
        rear = newnode;
    }
    
    else
    {
 
        rear->next = newnode;
 
        newnode->next = NULL;
 
        rear = newnode;
 
    }
 
}
 
  
 
void display()
{
    struct node *temp = front;
    
    printf("The queue is:\n");
    
    while(temp!=NULL)
    {
 
        printf("%d, ", temp->data);
 
        temp = temp->next;
 
    }
 
    printf("\n");
 
}
 
  
void dequeue()
{
    if(front==NULL)
    {
        printf("the queue is empty:\n");
    }
    
    else
 
    {
        struct node *temp;
        // 1 2 3
        temp = front; // 1
        
        if(temp->next==NULL)
        {
            rear = NULL;
        }
 
        front = front->next; // front = 2
 
        free(temp); // 2 3
        
    }
 
}
 
  
int main()
 
{
 
    int ch;
    while(1)
 
    {
 
        printf("1.enqueue\n2.dequeue\n3.display\n\4.exit\n");
        scanf("%d", &ch);
 
        switch(ch)
 
        {
 
            case 1:
            enqueue();
            break;
 
            case 2:
            dequeue();
            break;
 
            case 3:
            display();
            break;
 
            case 4:
            exit(0);
            break;
 
            default:
            printf("wrong input!\n");
 
        }
 
    }
 
  
 
    return 0;
 
}