Advertisement
DavidsInferno

Unija/presjek

Nov 12th, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.53 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5. #define MINIMALNA_VELICINA_CLANA (0)
  6. #define MAKSIMALNA_VELICINA_CLANA (9)
  7.  
  8. typedef struct _cvor* Position;
  9. typedef struct _cvor
  10. {
  11. int broj;
  12. Position next;
  13. }Cvor;
  14.  
  15. void FreeAlocatedData(Position);
  16. int PopuniListu(Position);
  17. void IspisListe(Position);
  18.  
  19. int NapraviUniju(Position prvaLista, Position drugaLista, Position unija);
  20. int NapraviPresjek(Position prvaLista, Position drugaLista, Position presjek);
  21. int GenerirajSlucajniBroj(int min, int max);
  22. int DodajSortirano(Position, Position);
  23. Position KreirajCvor(int);
  24. int DodajIzaTrenutnog(Position lista, Position newItem);
  25.  
  26. int main(int argc, char* argv[])
  27. {
  28. Cvor prvaLista;
  29. Cvor drugaLista;
  30. Cvor unija;
  31. Cvor presjek;
  32. srand((unsigned)time(NULL));
  33.  
  34. prvaLista.next = NULL;
  35. drugaLista.next = NULL;
  36. unija.next = NULL;
  37. presjek.next = NULL;
  38.  
  39. PopuniListu(&prvaLista);
  40. PopuniListu(&drugaLista);
  41.  
  42. IspisListe(prvaLista.next);
  43. IspisListe(drugaLista.next);
  44.  
  45. NapraviUniju(&prvaLista, &drugaLista, &unija);
  46. IspisListe(unija.next);
  47.  
  48. FreeAlocatedData(&prvaLista);
  49. FreeAlocatedData(&drugaLista);
  50. FreeAlocatedData(&unija);
  51. //FreeAlocatedData(&presjek);
  52.  
  53. return 0;
  54. }
  55.  
  56. int PopuniListu(Position head)
  57. {
  58. int unos = 0;
  59. int temp = 0;
  60. int i = 0;
  61. Position originalHead;
  62.  
  63. printf("Koliko zelite clanova u listi? ");
  64. scanf("%d", &unos);
  65.  
  66. originalHead = head;
  67. head = head->next;
  68.  
  69. for (i = 0; i < unos; i++)
  70. {
  71. temp = GenerirajSlucajniBroj(MINIMALNA_VELICINA_CLANA, MAKSIMALNA_VELICINA_CLANA);
  72. DodajSortirano(originalHead, KreirajCvor(temp));
  73. }
  74.  
  75. return 0;
  76. }
  77.  
  78. void IspisListe(Position position)
  79. {
  80. while (position != NULL)
  81. {
  82. printf("%d ", position->broj);
  83. position = position->next;
  84. }
  85. printf("\n");
  86. }
  87.  
  88. int GenerirajSlucajniBroj(int min, int max)
  89. {
  90. return rand() % (max - min + 1) + min;
  91. }
  92.  
  93. Position KreirajCvor(int broj)
  94. {
  95. Position noviCvor;
  96. noviCvor = (Position)malloc(sizeof(Cvor));
  97. noviCvor->broj = broj;
  98. noviCvor->next = NULL;
  99.  
  100. return noviCvor;
  101. }
  102.  
  103. int DodajIzaTrenutnog(Position lista, Position newItem)
  104. {
  105. newItem->next = lista->next;
  106. lista->next = newItem;
  107. return -2;
  108. }
  109.  
  110. int DodajSortirano(Position head, Position newItem)
  111. {
  112. while (head->next != NULL && head->next->broj > newItem->broj)
  113. {
  114. head = head->next;
  115. }
  116. DodajIzaTrenutnog(head, newItem);
  117.  
  118. return -1;
  119. }
  120.  
  121. int NapraviUniju(Position prvaLista, Position drugaLista, Position unija)
  122. {
  123. int pL = DuljinaListe(prvaLista);
  124. int dL = DuljinaListe(drugaLista);
  125. int i, j;
  126.  
  127. for (i = 0; i < pL; i++)
  128. for (j = 0; j < dL; j++)
  129.  
  130.  
  131.  
  132. return 0;
  133. }
  134.  
  135. int DuljinaListe(Position lista)
  136. {
  137. int cntr = 0;
  138. while (lista->next != NULL)
  139. {
  140. cntr++;
  141. lista = lista->next;
  142. }
  143.  
  144. return cntr;
  145. }
  146.  
  147. void FreeAlocatedData(Position p)
  148. {
  149. while (p->next != NULL)
  150. {
  151. free(p->broj);
  152. }
  153. free(p);
  154. }
  155.  
  156. int NapraviPresjek(Position prvaLista, Position drugaLista, Position presjek)
  157. {
  158. Position newNode = NULL;
  159. while (prvaLista != NULL && drugaLista != NULL) {
  160. if (prvaLista->broj > drugaLista->broj) {
  161. prvaLista = prvaLista->next;
  162. }
  163. else if (drugaLista->broj > prvaLista->broj) {
  164. drugaLista = drugaLista->next;
  165. }
  166. else if (prvaLista->broj == drugaLista->broj) {
  167. newNode = createNew();
  168. if (newNode == NULL)
  169. return 1;
  170. newNode->broj = prvaLista->broj;
  171. prvaLista = prvaLista->next;
  172. drugaLista = drugaLista->next;
  173. newNode->next = presjek->next;
  174. presjek->next = newNode;
  175. presjek = newNode;
  176. }
  177. }
  178. return 0;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement