C Programs | IT Developer
IT Developer

C Programs



Share with a Friend

Dynamic Memory Allocation in C

Queue using dynamic memory

C Program: Queue Implementation Using Dynamic Memory (malloc)

C

#include <stdio.h>

#include <stdlib.h>

 

// Structure for Queue

struct Queue {

    int *arr;

    int front;

    int rear;

    int capacity;

};

 

// Function prototypes

void initialize(struct Queue *queue, int capacity);

int isFull(struct Queue *queue);

int isEmpty(struct Queue *queue);

void enqueue(struct Queue *queue, int value);

int dequeue(struct Queue *queue);

int peek(struct Queue *queue);

void display(struct Queue *queue);

 

int main() {

    struct Queue queue;

    int capacity, choice, value;

 

    printf("Enter the maximum size of queue: ");

    scanf("%d", &capacity);

 

    initialize(&queue, capacity);

 

    do {

        printf("\n--- Queue Operations Menu ---\n");

        printf("1. Enqueue (Insert)\n");

        printf("2. Dequeue (Remove)\n");

        printf("3. Peek (Front Element)\n");

        printf("4. Display Queue\n");

        printf("0. Exit\n");

        printf("Enter your choice: ");

        scanf("%d", &choice);

 

        switch (choice) {

            case 1:

                printf("Enter value to enqueue: ");

                scanf("%d", &value);

                enqueue(&queue, value);

                break;

            case 2:

                value = dequeue(&queue);

                if (value != -1)

                    printf("Dequeued value: %d\n", value);

                break;

            case 3:

                value = peek(&queue);

                if (value != -1)

                    printf("Front element: %d\n", value);

                break;

            case 4:

                display(&queue);

                break;

            case 0:

                printf("Exiting program.\n");

                break;

            default:

                printf("Invalid choice!\n");

        }

    } while (choice != 0);

 

    // Free dynamically allocated memory

    free(queue.arr);

 

    return 0;

}

 

// Function to initialize the queue

void initialize(struct Queue *queue, int capacity) {

    queue->capacity = capacity;

    queue->front = -1;

    queue->rear = -1;

    queue->arr = (int *) malloc(queue->capacity * sizeof(int));

 

    if (queue->arr == NULL) {

        printf("Memory allocation failed!\n");

        exit(1);

    }

}

 

// Check if queue is full

int isFull(struct Queue *queue) {

    return queue->rear == queue->capacity - 1;

}

 

// Check if queue is empty

int isEmpty(struct Queue *queue) {

    return queue->front == -1 || queue->front > queue->rear;

}

 

// Enqueue operation

void enqueue(struct Queue *queue, int value) {

    if (isFull(queue)) {

        printf("Queue Overflow! Cannot enqueue %d\n", value);

        return;

    }

 

    if (queue->front == -1)

        queue->front = 0;

 

    queue->arr[++queue->rear] = value;

    printf("%d enqueued to queue.\n", value);

}

 

// Dequeue operation

int dequeue(struct Queue *queue) {

    if (isEmpty(queue)) {

        printf("Queue Underflow! No elements to dequeue.\n");

        return -1;

    }

 

    int value = queue->arr[queue->front++];

    if (queue->front > queue->rear)

        queue->front = queue->rear = -1;

 

    return value;

}

 

// Peek (front element)

int peek(struct Queue *queue) {

    if (isEmpty(queue)) {

        printf("Queue is empty!\n");

        return -1;

    }

    return queue->arr[queue->front];

}

 

// Display all elements

void display(struct Queue *queue) {

    if (isEmpty(queue)) {

        printf("Queue is empty!\n");

        return;

    }

 

    printf("\nQueue elements (Front to Rear):\n");

    for (int i = queue->front; i <= queue->rear; i++)

        printf("%d ", queue->arr[i]);

    printf("\n");

}

Output

 
OUTPUT :
Enter the maximum size of queue: 3

--- Queue Operations Menu ---
1. Enqueue (Insert)
2. Dequeue (Remove)
3. Peek (Front Element)
4. Display Queue
0. Exit
Enter your choice: 1
Enter value to enqueue: 10
10 enqueued to queue.

Enter your choice: 1
Enter value to enqueue: 20
20 enqueued to queue.

Enter your choice: 4
Queue elements (Front to Rear):
10 20

Enter your choice: 2
Dequeued value: 10

Enter your choice: 3
Front element: 20

Explanation

Function

Description

initialize()

Dynamically allocates memory for queue using malloc().

enqueue()

Inserts an element at the rear of the queue.

dequeue()

Removes an element from the front of the queue.

peek()

Displays the front element without removing it.

display()

Prints all elements from front to rear.

free()

Releases dynamically allocated memory after use.