Data Structures Practical 25

Question 1
Write a C program to implement enqueue operation on Priority queue using Linked List.
priorityenqueue.c
C
				#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct Node {
    int data;
    int priority; 
    struct Node* next;
};

struct Node* front = NULL;

void enqueue(int, int);
void display();

void main() {
    clrscr(); 
    
    printf("--- Priority Queue Enqueue Operations ---\n\n");
    
    enqueue(48, 3);
    enqueue(15, 1); 
    enqueue(69, 4); 
    enqueue(12, 2); 
    enqueue(23, 2); 
    
    display();
    
    getch(); 
}

void enqueue(int element, int p) 
{
    struct Node* temp;
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    
    if (newNode == NULL) 
	{
        printf("Queue Overflow! Out of memory.\n");
        return;
    }
    
    newNode->data = element;
    newNode->priority = p;
    newNode->next = NULL;
    
    if (front == NULL || p < front->priority) 
	{
        newNode->next = front;
        front = newNode;
    } 
    else 
	{
        temp = front;
        
        while (temp->next != NULL && temp->next->priority <= p) 
		{
            temp = temp->next;
        }
        
        newNode->next = temp->next;
        temp->next = newNode;
    }
    
    printf("Enqueued: Data = %d, Priority = %d\n", element, p);
}

void display() 
{
    struct Node* temp = front;
    
    if (front == NULL) 
	{
        printf("\nPriority Queue is Empty!\n");
        return;
    }
    
    printf("\nCurrent Priority Queue State (Ordered by priority):\n");
    printf("Format: [Data (Priority)]\n\n");
    
    while (temp != NULL) 
	{
        printf("[%d (%d)] -> ", temp->data, temp->priority);
        temp = temp->next;
    }
    printf("NULL\n");
}

			
Output
Question 2
Write a C program to implement dequeue operation on Priority queue using Linked List.
prioritydequeue.c
C
				#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct Node {
    int data;
    int priority; 
    struct Node* next;
};

struct Node* front = NULL;

void enqueue(int, int);
int dequeue();
void display();

void main() 
{
    clrscr(); 
    
    printf("--- Priority Queue Operations using Linked List ---\n\n");
    
    printf("=== ENQUEUE OPERATIONS ===\n");
    enqueue(48, 3);
    enqueue(15, 1); 
    enqueue(69, 4); 
    enqueue(12, 2); 
    display();
    
    printf("\n=== DEQUEUE OPERATIONS ===\n");
    dequeue(); 
    display();
    
    dequeue(); 
    display();
    
    dequeue(); 
    dequeue(); 
    display();
    
    printf("\n=== TRIGGERING UNDERFLOW ===\n");
    dequeue();
    
    getch(); 
}

void enqueue(int element, int p) 
{
    struct Node* temp;
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    
    if (newNode == NULL) 
	{
        printf("Queue Overflow! Out of memory.\n");
        return;
    }
    
    newNode->data = element;
    newNode->priority = p;
    newNode->next = NULL;
    
    if (front == NULL || p < front->priority) 
	{
        newNode->next = front;
        front = newNode;
    } 
    else 
	{
        temp = front;
        while (temp->next != NULL && temp->next->priority <= p) 
		{
            temp = temp->next;
        }
        newNode->next = temp->next;
        temp->next = newNode;
    }
    printf("Enqueued: Data = %d, Priority = %d\n", element, p);
}

int dequeue() 
{
    struct Node* temp;
    int deletedValue;
    
    if (front == NULL) 
	{
        printf("[UNDERFLOW ERROR] Priority Queue is Empty! Cannot dequeue.\n");
        return -9999;
    }
    
    temp = front;               
    deletedValue = temp->data;  
    front = front->next;        
    
    free(temp);                 
    
    printf("Dequeued: %d\n", deletedValue);
    return deletedValue;
}

void display() 
{
    struct Node* temp = front;
    
    if (front == NULL) 
	{
        printf("Current Priority Queue: [Empty]\n");
        return;
    }
    
    printf("Current Priority Queue: ");
    while (temp != NULL) 
	{
        printf("[%d (P:%d)] -> ", temp->data, temp->priority);
        temp = temp->next;
    }
    printf("NULL\n");
}

			
Output

Leave a Comment

Your email address will not be published. Required fields are marked *