Advertisement
Guest User

414 - Fila do Recreio

a guest
Oct 26th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct node Node;
  5. struct node {
  6. int item;
  7. int priority;
  8. Node *next_node;
  9. };
  10.  
  11. typedef struct pqueue PriorityQueue;
  12. struct pqueue {
  13. Node *first;
  14. };
  15.  
  16. PriorityQueue* create_priority_queue() {
  17. PriorityQueue *pqueue = (PriorityQueue*) malloc(sizeof(PriorityQueue));
  18. pqueue->first = NULL;
  19.  
  20. return pqueue;
  21. }
  22.  
  23. int is_empty(PriorityQueue *pqueue) {
  24. return (pqueue->first == NULL);
  25. }
  26.  
  27. void free_list(Node *node) {
  28. if(node == NULL) return;
  29.  
  30. free_list(node->next_node);
  31.  
  32. free(node);
  33. }
  34.  
  35. PriorityQueue* enqueue(PriorityQueue *pqueue, int item, int priority) {
  36. Node *new_node = (Node*) malloc(sizeof(Node));
  37. new_node->item = item;
  38. new_node->priority = priority;
  39.  
  40. if (is_empty(pqueue) || (priority > pqueue->first->priority)) {
  41. new_node->next_node = pqueue->first;
  42. pqueue->first = new_node;
  43. } else {
  44. Node *current = pqueue->first;
  45.  
  46. while ((current->next_node != NULL) && (current->next_node->priority > priority)) {
  47. current = current->next_node;
  48. }
  49.  
  50. new_node->next_node = current->next_node;
  51. current->next_node = new_node;
  52. }
  53.  
  54. return pqueue;
  55. }
  56.  
  57. int dequeue(PriorityQueue *pqueue) {
  58. if (!is_empty(pqueue)) {
  59. Node *dequeued = pqueue->first;
  60. int item = dequeued->item;
  61.  
  62. pqueue->first = dequeued->next_node;
  63. free(dequeued);
  64.  
  65. return item;
  66. } else {
  67. return -1;
  68. }
  69. }
  70.  
  71. int main() {
  72. PriorityQueue *lunch_queue;
  73. int n, m, i;
  74.  
  75. scanf("%d", &n);
  76.  
  77. for(n; n >= 1; --n) {
  78. lunch_queue = create_priority_queue();
  79.  
  80. scanf("%d", &m);
  81. for(i = 1; i <= m; ++i) {
  82. int points;
  83. scanf("%d", &points);
  84. enqueue(lunch_queue, i, points);
  85. }
  86.  
  87. int swaps = 0;
  88. for(i = 1; i <= m; ++i) {
  89. if(dequeue(lunch_queue) != i) ++swaps;
  90. }
  91.  
  92. printf("%d\n", m - swaps);
  93.  
  94. free_list(lunch_queue->first);
  95. free(lunch_queue);
  96. }
  97.  
  98. return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement