#include #include typedef struct Node { int data; int prio; struct Node* next; } Node; Node* head = NULL; void insert(int d, int p) { Node* t = (Node*)malloc(sizeof(Node)); t->data = d; t->prio = p; if (!head || head->prio < p) { t->next = head; head = t; } else { Node* curr = head; while (curr->next && curr->next->prio >= p) curr = curr->next; t->next = curr->next; curr->next = t; } } void pop() { if(!head) { printf("Empty\n"); return; } Node* t = head; printf("Served: %d\n", t->data); head = head->next; free(t); } // New Display Function void display() { if (!head) { printf("Queue is Empty\n"); return; } Node* curr = head; printf("Priority Queue: \n"); printf("[Data, Priority] -> "); while (curr != NULL) { printf("[%d, P:%d]", curr->data, curr->prio); if (curr->next != NULL) printf(" -> "); curr = curr->next; } printf("\n"); } int main() { int choice, d, p; while(1) { printf("\n1. Insert (Value & Priority)\n2. Dequeue\n3. Display\n4. Exit\nEnter choice: "); scanf("%d", &choice); if(choice == 1) { printf("Enter Value and Priority (Higher number = Higher Priority): "); scanf("%d %d", &d, &p); insert(d, p); } else if(choice == 2) pop(); else if(choice == 3) display(); else break; } return 0; }