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
