Advertisement
Guest User

Zadanie 2

a guest
Mar 26th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. // Zadanie nr 2
  2.  
  3. # include <stdio.h>
  4. # include <stdlib.h>
  5. # include <stdbool.h>
  6.  
  7. struct queue_node {
  8. int data;
  9. // Dodałem wskaźnik na poprzedni element "*prev"
  10. struct queue_node *next, *prev;
  11. };
  12. struct queue_pointers {
  13. struct queue_node *head, *tail;
  14. };
  15.  
  16. // Jesli order == true to element dodawany jest na koncu kolejki
  17. // Jesli order == false to element dodawany jest na poczatku kolejki
  18.  
  19. bool enqueue(struct queue_pointers *queue, int data, bool order) {
  20. struct queue_node *new_node = (struct queue_node *)
  21. malloc(sizeof(struct queue_node));
  22. if (NULL != new_node) {
  23. if(order) {
  24. new_node->data = data;
  25. new_node->next = NULL;
  26. if (NULL == queue->head)
  27. queue->head = queue->tail = new_node;
  28. else {
  29. new_node->prev = queue->tail;
  30. queue->tail->next = new_node;
  31. queue->tail = new_node;
  32. }
  33. return true;
  34. } else {
  35. new_node->data = data;
  36. new_node->prev = NULL;
  37. if (NULL == queue->head)
  38. queue->head = queue->tail = new_node;
  39. else {
  40. new_node->next = queue->head;
  41. queue->head->prev = new_node;
  42. queue->head = new_node;
  43. }
  44. return true;
  45. }
  46.  
  47. }
  48. return false;
  49. }
  50.  
  51. bool dequeue(struct queue_pointers *queue, int *data) {
  52. if(queue->head != NULL) {
  53. struct queue_node *tmp = queue->head->next;
  54. *data = queue->head->data;
  55. free(queue->head);
  56. queue->head = tmp;
  57. if (NULL == tmp)
  58. queue->tail = NULL;
  59. return true;
  60. }
  61. return false;
  62. }
  63.  
  64. void print_queue(struct queue_pointers queue) {
  65. for (; NULL != queue.head; queue.head = queue.head->next)
  66. printf("%d ", queue.head->data);
  67. printf("\n");
  68. }
  69.  
  70. // Cały kod od góry do tej linijki jest wzięty z instrukcji oraz delikatnie przerobiony aby spełniał polecenie danego zadania
  71.  
  72. int main() {
  73. // Tworzymy początek i koniec kolejki
  74. struct queue_pointers queue = {NULL, NULL};
  75.  
  76. int i;
  77.  
  78. // Wypełniamy kolejke liczbami od 0 do 4
  79. // Jesli order == true to element dodawany jest na koncu kolejki
  80. // Jesli order == false to element dodawany jest na poczatku kolejki
  81. for(i = 0; i < 5; i++) {
  82. enqueue(&queue, i, true);
  83. }
  84.  
  85. puts("Zawartość kolejki:");
  86. print_queue(queue);
  87.  
  88. puts("Kolejność usuwania elementów kolejki:");
  89. while(dequeue(&queue, &i)){
  90. printf("%d ", i);
  91. }
  92.  
  93. return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement