Advertisement
ppathak35

Priority Queue

Jun 29th, 2022 (edited)
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.39 KB | None | 0 0
  1. //  Priority Queue as array structure
  2.  
  3. #include <stdio.h>
  4.  
  5. // macros
  6. #define maxsize 5
  7.  
  8. // Function declarations
  9. int isEmpty();
  10. int isFull();
  11. void insert(int, int);
  12. void display();
  13. int queueSize();
  14. int getHighestPriority();
  15. int deleteHighestPriority();
  16.  
  17. // Global Vars
  18. struct pqueue{
  19.     int data;
  20.     int priority;
  21. } queue[maxsize];
  22.  
  23. int rear = -1;
  24.  
  25. int main(){
  26.     int choice=0, element=0, priority=0;
  27.    
  28.     while (1) {
  29.         printf("\n1. Insert Element\n");
  30.         printf("2. Display Queue\n");
  31.         printf("3. Get Highest priority Element\n");
  32.         printf("4. Delete Element\n");
  33.         printf("5. Queue Size\n");
  34.         printf("5. Exit\n");
  35.        
  36.         printf("\nEnter choice : ");
  37.         scanf("%d", &choice);
  38.        
  39.         switch(choice) {
  40.             case 1 : if (!isFull()){
  41.                         printf("Inserting Element : ");
  42.                         scanf("%d", &element);
  43.                         printf("Inserting Priority : ");
  44.                         scanf("%d", &priority);
  45.                         insert(element, priority);
  46.                     }
  47.                     else {
  48.                         printf("Queue Overflow");
  49.                     }
  50.                     break;
  51.             case 2 : if (!isEmpty()) {
  52.                         display();
  53.                     }
  54.                     else {
  55.                         printf("Queue Empty");
  56.                     }
  57.                     break;
  58.             case 3 : if (!isEmpty()) {
  59.                         priority = getHighestPriority();
  60.                         printf("priority : %d\n", priority);
  61.                     }
  62.                     else {
  63.                         printf("Queue Empty");
  64.                     }
  65.                     break;
  66.             case 4 : if (!isEmpty()) {
  67.                        element = deleteHighestPriority();
  68.                         printf("data : %d\n", element);
  69.                     }
  70.                     else {
  71.                         printf("Queue Empty");
  72.                     }
  73.                     break;
  74.             case 5 : if (!isEmpty()) {
  75.                         printf("Queue Size : %d", queueSize());
  76.                     }
  77.                     else {
  78.                         printf("Queue Empty");
  79.                     }
  80.                     break;
  81.             case 6 : exit(0);
  82.             default: break;
  83.         }
  84.     }
  85.     return 0;
  86. }
  87.  
  88. int isEmpty() {
  89.     return rear == -1;
  90. }
  91.  
  92. int isFull() {
  93.     return rear == maxsize - 1;
  94. }
  95.  
  96. void insert(int d, int p) {
  97.     rear += 1;
  98.     queue[rear].data = d;
  99.     queue[rear].priority = p;
  100. }
  101.  
  102. void display() {
  103.     printf("Queue : ");
  104.     for (int i=0; i<=rear; i++) {
  105.         printf("(%d, %d) | ", queue[i].data, queue[i].priority);
  106.     }
  107.     printf("\n");
  108. }
  109.  
  110. int queueSize() {
  111.     return rear+1;
  112. }
  113.  
  114. int getHighestPriority() {
  115.     int p = -1;
  116.     for (int i=0; i<=rear; i++) {
  117.         if (queue[i].priority > p) {
  118.             p = queue[i].priority;
  119.         }
  120.     }
  121.     return p;
  122. }
  123.  
  124. int deleteHighestPriority() {
  125.     int p=-1, d=-1, i, j;
  126.     p = getHighestPriority();
  127.     for (i=0; i<=rear; i++) {
  128.         if (queue[i].priority == p) {
  129.             d = queue[i].data;
  130.             break;
  131.         }
  132.     }
  133.     for (j=i; j<=rear; j++) {
  134.         queue[j].priority = queue[j+1].priority;
  135.         queue[j].data = queue[j+1].data;
  136.     }
  137.     rear -= 1;
  138.     return d;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement