Skip to content

Experiment 5

Question

  • Write a program that implement Queue (its operations) using I. Arrays II. ADT

5.a I. Arrays:

Program:

c
#include <stdio.h>
#include <stdlib.h>

int *queue;
int front = -1, rear = -1, size = 0;

// Enqueue function
void enqueue(int data)
{
    if (rear == size - 1)
    {
        printf("Queue is full (Overflow).\n");
        return;
    }
    if (front == -1)
        front = 0;
    queue[++rear] = data;
    printf("Enqueued element: %d\n", data);
}

// Dequeue function
void dequeue()
{
    if (front == -1 || front > rear)
    {
        printf("Queue is empty (Underflow).\n");
        return;
    }
    printf("Dequeued element: %d\n", queue[front++]);
    if (front > rear)
        front = rear = -1; // Reset
}

// Display front element
void showFront()
{
    if (front == -1 || front > rear)
    {
        printf("Queue is empty.\n");
    }
    else
    {
        printf("Front element: %d\n", queue[front]);
    }
}

// Display rear element
void showRear()
{
    if (rear == -1 || front > rear)
    {
        printf("Queue is empty.\n");
    }
    else
    {
        printf("Rear element: %d\n", queue[rear]);
    }
}


int main()
{
    int choice, data;

    printf("Enter the size of the queue: ");
    scanf("%d", &size);

    // Dynamically allocate memory for queue
    queue = (int *)malloc(size * sizeof(int));
    if (queue == NULL)
    {
        printf("Memory allocation failed!\n");
        return 1;
    }

    while (1)
    {
        printf("\nMenu:\n");
        printf("1. Enqueue\n");
        printf("2. Dequeue\n");
        printf("3. Front\n");
        printf("4. Rear\n");
        printf("5. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice)
        {
        case 1:
            printf("Enter data: ");
            scanf("%d", &data);
            enqueue(data);
            break;
        case 2:
            dequeue();
            break;
        case 3:
            showFront();
            break;
        case 4:
            showRear();
            break;
        case 5:
            printf("Exiting program.\n");
            free(queue); // Free allocated memory
            return 0;
        default:
            printf("Invalid choice! Try again.\n");
        }
    }
    return 0;
}

Output:

5.b II. Linked List:

Program:

c
#include <stdio.h>
#include <stdlib.h>

struct node
{
    int data;
    struct node *link;
};

// Global front and rear pointers
struct node *front = NULL, *rear = NULL;

// Create a new node
struct node *createNode(int data)
{
    struct node *newNode = (struct node *)malloc(sizeof(struct node));
    newNode->data = data;
    newNode->link = NULL;
    return newNode;
}

// Enqueue: Insert at rear
void enqueue(int data)
{
    struct node *newNode = createNode(data);
    if (rear == NULL)
    {
        front = rear = newNode;
    }
    else
    {
        rear->link = newNode;
        rear = newNode;
    }
    printf("Enqueued element: %d\n", data);
}

// Dequeue: Remove from front
void dequeue()
{
    if (front == NULL)
    {
        printf("Queue is empty.\n");
        return;
    }

    struct node *temp = front;
    front = front->link;

    if (front == NULL)
        rear = NULL;

    printf("Dequeued element: %d\n", temp->data);
    free(temp);
}

// Display front element
void showFront()
{
    if (front == NULL)
    {
        printf("Queue is empty.\n");
    }
    else
    {
        printf("Front element: %d\n", front->data);
    }
}

// Display rear element
void showRear()
{
    if (rear == NULL)
    {
        printf("Queue is empty.\n");
    }
    else
    {
        printf("Rear element: %d\n", rear->data);
    }
}

int main()
{
    int choice, data;

    while (1)
    {
        printf("\nMenu:\n");
        printf("1. Enqueue\n");
        printf("2. Dequeue\n");
        printf("3. Front\n");
        printf("4. Rear\n");
        printf("5. Exit\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice)
        {
        case 1:
            printf("Enter data: ");
            scanf("%d", &data);
            enqueue(data);
            break;
        case 2:
            dequeue();
            break;
        case 3:
            showFront();
            break;
        case 4:
            showRear();
            break;
        case 5:
            printf("Exiting program.\n");
            return 0;
        default:
            printf("Invalid choice! Try again.\n");
        }
    }
    return 0;
}

Output:

Released under the MIT License.