Advertisement
mbah_bejo

Mod1.2

Feb 27th, 2020
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.41 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdbool.h>
  3. #include <stdio.h>
  4.  
  5. /* Struktur Node */
  6.  
  7. typedef struct pqueueNode_t {
  8.     int data;
  9.     int priority;
  10.     struct pqueueNode_t *next;
  11. } PQueueNode;
  12.  
  13. /* Struktur ADT PriorityQueue menggunakan Linked List */
  14.  
  15. // Prioritas default: nilai minimum
  16. typedef struct pqueue_t {
  17.     PQueueNode *_top;
  18.     unsigned _size;
  19. } PriorityQueue;
  20.  
  21. void pqueue_init(PriorityQueue *pqueue);
  22. bool pqueue_isEmpty(PriorityQueue *pqueue);
  23. void pqueue_push(PriorityQueue *pqueue, int value, int prior);
  24. void pqueue_pop(PriorityQueue *pqueue);
  25. int  pqueue_top(PriorityQueue *pqueue);
  26.  
  27. void pqueue_init(PriorityQueue *pqueue)
  28. {
  29.     pqueue->_top = NULL;
  30.     pqueue->_size = 0;
  31. }
  32.  
  33. bool pqueue_isEmpty(PriorityQueue *pqueue) {
  34.     return (pqueue->_top == NULL);
  35. }
  36.  
  37. void pqueue_push(PriorityQueue *pqueue, int value, int prior)
  38. {
  39.     PQueueNode *temp = pqueue->_top;
  40.     PQueueNode *newNode = (PQueueNode*) malloc (sizeof(PQueueNode));
  41.     newNode->data = value;
  42.     newNode->priority=prior;
  43.     newNode->next = NULL;
  44.  
  45.     if (pqueue_isEmpty(pqueue)) {
  46.         pqueue->_top = newNode;
  47.         return;
  48.     }
  49.  
  50.     if (prior > pqueue->_top->priority) {
  51.         newNode->next = pqueue->_top;
  52.         pqueue->_top = newNode;
  53.     }
  54.     else {
  55.         while ( temp->next != NULL && temp->next->priority > prior)
  56.             temp = temp->next;
  57.         newNode->next = temp->next;
  58.         temp->next = newNode;
  59.     }
  60. }
  61.  
  62. void pqueue_pop(PriorityQueue *pqueue)
  63. {
  64.     if (!pqueue_isEmpty(pqueue)) {
  65.         PQueueNode *temp = pqueue->_top;
  66.         pqueue->_top = pqueue->_top->next;
  67.         printf("%d\n",temp->data);
  68.         free(temp);
  69.     }
  70. }
  71.  
  72. int pqueue_top(PriorityQueue *pqueue) {
  73.     if (!pqueue_isEmpty(pqueue))
  74.         return pqueue->_top->data;
  75.     else return 0;
  76. }
  77.  
  78. int main(int argc, char const *argv[])
  79. {
  80.    
  81.     PriorityQueue myPque;
  82.    
  83.     pqueue_init(&myPque);
  84.    
  85.     int testCase,i;
  86.     char commandList0[]="MASUK",commandList1[]="LAYANI";
  87.    
  88.     scanf("%d",&testCase);
  89.    
  90.     for(i=0;i < testCase;i++){
  91.         char command[7];
  92.         scanf("%s",command);
  93.         if(strcmp(command , commandList1)==0)
  94.             pqueue_pop(&myPque);
  95.         else if(strcmp(command , commandList0)==0){
  96.             int Data,Priority;
  97.             scanf("%d %d",&Data,&Priority);
  98.             pqueue_push(&myPque, Data, Priority);
  99.         }
  100.     }
  101.     printf("HORE\n");
  102.    
  103.     puts("");
  104.     return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement