Saturday, June 20, 2026

NEP-SYBCS-DS-I Assignment-6

Assignment 6 Queue  


Set A

a) Perform the following operations using static implementation of Queue

i. Create a queue of n integers.

ii. Delete the element from the queue and display it.

#include <stdio.h>

#define MAX 100


int queue[MAX];

int front = -1, rear = -1;


// Enqueue Operation

void enqueue(int value)

{

    if(rear == MAX - 1)

    {

        printf("Queue Overflow\n");

        return;

    }


    if(front == -1)

        front = 0;


    queue[++rear] = value;

}


// Dequeue Operation

int dequeue()

{

    int value;


    if(front == -1 || front > rear)

    {

        printf("Queue Underflow\n");

        return -1;

    }


    value = queue[front];


    if(front == rear)

        front = rear = -1;

    else

        front++;


    return value;

}


// Display Queue

void display()

{

    int i;


    if(front == -1)

    {

        printf("Queue is Empty\n");

        return;

    }


    printf("Queue Elements:\n");

    for(i = front; i <= rear; i++)

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


    printf("\n");

}


int main()

{

    int n, i, value, deleted;


    printf("Enter number of elements: ");

    scanf("%d", &n);


    printf("Enter %d integers:\n", n);


    for(i = 0; i < n; i++)

    {

        scanf("%d", &value);

        enqueue(value);

    }


    printf("\nQueue after insertion:\n");

    display();


    deleted = dequeue();


    if(deleted != -1)

        printf("\nDeleted Element = %d\n", deleted);


    printf("\nQueue after deletion:\n");

    display();


    return 0;

}


b) Perform the following operations using dynamic implementation of Queue

i. Insert n elements in a queue.

ii. Delete the element from the queue and display it.

#include <stdio.h>

#include <stdlib.h>


// Node structure

struct Node

{

    int data;

    struct Node *next;

};


struct Node *front = NULL;

struct Node *rear = NULL;


// Enqueue Operation

void enqueue(int value)

{

    struct Node *newNode;


    newNode = (struct Node *)malloc(sizeof(struct Node));


    if(newNode == NULL)

    {

        printf("Queue Overflow\n");

        return;

    }


    newNode->data = value;

    newNode->next = NULL;


    if(front == NULL)

    {

        front = rear = newNode;

    }

    else

    {

        rear->next = newNode;

        rear = newNode;

    }

}


// Dequeue Operation

int dequeue()

{

    struct Node *temp;

    int value;


    if(front == NULL)

    {

        printf("Queue Underflow\n");

        return -1;

    }


    temp = front;

    value = temp->data;


    front = front->next;


    if(front == NULL)

        rear = NULL;


    free(temp);


    return value;

}


// Display Queue

void display()

{

    struct Node *temp;


    if(front == NULL)

    {

        printf("Queue is Empty\n");

        return;

    }


    temp = front;


    printf("Queue Elements:\n");

    while(temp != NULL)

    {

        printf("%d ", temp->data);

        temp = temp->next;

    }

    printf("\n");

}


int main()

{

    int n, i, value, deleted;


    printf("Enter number of elements: ");

    scanf("%d", &n);


    printf("Enter %d integers:\n", n);


    for(i = 0; i < n; i++)

    {

        scanf("%d", &value);

        enqueue(value);

    }


    printf("\nQueue after insertion:\n");

    display();


    deleted = dequeue();


    if(deleted != -1)

        printf("\nDeleted Element = %d\n", deleted);


    printf("\nQueue after deletion:\n");

    display();


    return 0;

}


Set B

a) Perform the following operations on circular Queue (static or dynamic implementation)

i. Create a queue of n integers.

ii. Delete the element from the queue and display it.

#include <stdio.h>

#define MAX 5

int queue[MAX];

int front = -1, rear = -1;

// Insert element

void enqueue(int value)

{

    if ((front == 0 && rear == MAX - 1) || (front == rear + 1))

    {

        printf("Queue Overflow\n");

        return;

    }

    if (front == -1)

    {

        front = rear = 0;

    }

    else if (rear == MAX - 1)

    {

        rear = 0;

    }

    else

    {

        rear++;

    }

    queue[rear] = value;

}

// Delete element

int dequeue()

{

    int value;

    if (front == -1)

    {

        printf("Queue Underflow\n");

        return -1;

    }

    value = queue[front];

    if (front == rear)

    {

        front = rear = -1;

    }

    else if (front == MAX - 1)

    {

        front = 0;

    }

    else

    {

        front++;

    }

    return value;

}

// Display queue

void display()

{

    int i;

    if (front == -1)

    {

        printf("Queue is Empty\n");

        return;

    }


    printf("Queue Elements: ");


    if (front <= rear)

    {

        for (i = front; i <= rear; i++)

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

    }

    else

    {

        for (i = front; i < MAX; i++)

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

        for (i = 0; i <= rear; i++)

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

    }

    printf("\n");

}

int main()

{

    int n, i, value, deleted;

    printf("Enter number of elements (Max %d): ", MAX);

    scanf("%d", &n);

    if (n > MAX)

    {

        printf("Queue size exceeds maximum capacity.\n");

        return 0;

    }

    printf("Enter %d integers:\n", n);

    for (i = 0; i < n; i++)

    {

        scanf("%d", &value);

        enqueue(value);

    }

    printf("\nQueue after insertion:\n");

    display();

    deleted = dequeue();

   if (deleted != -1)

        printf("\nDeleted Element = %d\n", deleted);

    printf("\nQueue after deletion:\n");

    display();

    return 0;

}


b) Write a program to create a Priority Queue and display it.

i. Add an element with its priority into the queue.

ii. Delete an element from queue according to its priority.

#include <stdio.h>

#define MAX 10

struct PriorityQueue

{

    int data;

    int priority;

};

struct PriorityQueue pq[MAX];

int size = 0;

// Insert element

void enqueue(int value, int priority)

{

    if (size == MAX)

    {

        printf("Priority Queue Overflow\n");

        return;

    }

    int i = size - 1;

    // Arrange elements according to priority

    while (i >= 0 && pq[i].priority > priority)

    {

        pq[i + 1] = pq[i];

        i--;

    }

    pq[i + 1].data = value;

    pq[i + 1].priority = priority;

    size++;

}

// Delete highest priority element

void dequeue()

{

    int i;

    if (size == 0)

    {

        printf("Priority Queue Underflow\n");

        return;

    }

    printf("Deleted Element = %d\n", pq[0].data);


    for (i = 0; i < size - 1; i++)

    {

        pq[i] = pq[i + 1];

    }


    size--;

}

// Display queue

void display()

{

    int i;


    if (size == 0)

    {

        printf("Priority Queue is Empty\n");

        return;

    }

    printf("\nElement\tPriority\n");

    for (i = 0; i < size; i++)

    {

        printf("%d\t%d\n", pq[i].data, pq[i].priority);

    }

}

int main()

{

    int n, i, value, priority;


    printf("Enter number of elements: ");

    scanf("%d", &n);


    for (i = 0; i < n; i++)

    {

        printf("\nEnter Element: ");

        scanf("%d", &value);


        printf("Enter Priority (Smaller number = Higher Priority): ");

        scanf("%d", &priority);


        enqueue(value, priority);

    }

    printf("\nPriority Queue:\n");

    display();

    printf("\nDeleting Highest Priority Element...\n");

    dequeue();

    printf("\nPriority Queue after Deletion:\n");

    display();


    return 0;

}

No comments:

Post a Comment