Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.17 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<time.h>
  3. #include<stdlib.h>
  4. #define D_CRT_NONSTDC_NO_WARNINGS_GLOBALS
  5. #pragma warning(disable : 4996)
  6.  
  7. typedef struct _cvor* Position;
  8. typedef struct _cvor
  9. {
  10.     int broj;
  11.     Position next;
  12. }Cvor;
  13.  
  14. void FreeAlocatedData(Position);
  15. int PopuniListu(Position);
  16. void IspisListe(Position);
  17. int NapraviUniju(Position prvaLista, Position drugaLista, Position unija);
  18. int NapraviPresjek(Position prvaLista, Position drugaLista, Position presjek);
  19. int GenerirajSlucajniBroj(int min, int max);
  20. int DodajSortirano(Position, Position);
  21. Position KreirajCvor(int);
  22. int DodajIzaTrenutnog(Position lista, Position newItem);
  23.  
  24. int main(int argc, char* argv[])
  25. {
  26.     Cvor prvaLista;
  27.     Cvor drugaLista;
  28.     Cvor unija;
  29.     Cvor presjek;
  30.  
  31.     prvaLista.next = NULL;
  32.     drugaLista.next = NULL;
  33.     unija.next = NULL;
  34.     presjek.next = NULL;
  35.  
  36.     srand((unsigned)time(NULL));
  37.  
  38.     PopuniListu(&prvaLista);
  39.     PopuniListu(&drugaLista);
  40.     IspisListe(prvaLista.next);
  41.     IspisListe(drugaLista.next);
  42.  
  43.     NapraviUniju(&prvaLista, &drugaLista, &unija);
  44.     NapraviPresjek(&prvaLista, &drugaLista, &presjek);
  45.  
  46.     IspisListe(unija.next);
  47.     IspisListe(presjek.next);
  48.  
  49.     FreeAlocatedData(&prvaLista);
  50.     FreeAlocatedData(&drugaLista);
  51.     FreeAlocatedData(&unija);
  52.     FreeAlocatedData(&presjek);
  53.  
  54.     return 0;
  55. }
  56.  
  57. int PopuniListu(Position head)
  58. {
  59.     int brojClanova = 0;
  60.     int i = 0;
  61.     int slucajniBroj = 0;
  62.     Position noviCvor = NULL;
  63.  
  64.     printf("Koliko ce bit clanova u listi? ");
  65.     scanf(" %d", &brojClanova);
  66.  
  67.     for (i = 0; i < brojClanova; i++)
  68.     {
  69.         slucajniBroj = GenerirajSlucajniBroj(0,9);
  70.         noviCvor = KreirajCvor(slucajniBroj);
  71.         DodajSortirano(head, noviCvor);
  72.     }
  73.  
  74.     return 0;
  75. }
  76. void IspisListe(Position position)
  77. {
  78.     while (position != NULL)
  79.     {
  80.         printf("%d ", position->broj);
  81.         position = position->next;
  82.     }
  83.     printf("\n");
  84. }
  85. int GenerirajSlucajniBroj(int min, int max)
  86. {
  87.     int broj = 0;
  88.  
  89.     broj = rand() % (max - min + 1) + min;
  90.  
  91.     return broj;
  92. }
  93. Position KreirajCvor(int broj)
  94. {
  95.     Position noviCvor = NULL;
  96.  
  97.     noviCvor = (Position)malloc(sizeof(Cvor));
  98.  
  99.     noviCvor->broj = broj;
  100.     noviCvor->next = NULL;
  101.  
  102.     return noviCvor;
  103. }
  104. int DodajIzaTrenutnog(Position lista, Position newItem)
  105. {
  106.     newItem->next = lista->next;
  107.     lista->next = newItem;
  108.  
  109.     return 0;
  110. }
  111.  
  112. int DodajSortirano(Position head, Position newItem)
  113. {
  114.     while (head->next != NULL)
  115.     {
  116.         if (newItem->broj == head->next->broj)
  117.         {
  118.             free(newItem);
  119.             return 0;
  120.         }
  121.  
  122.         if (newItem->broj < head->next->broj)
  123.         {
  124.             break;
  125.         }
  126.  
  127.         head = head->next;
  128.     }
  129.  
  130.     DodajIzaTrenutnog(head, newItem);
  131.     return 0;
  132. }
  133. int NapraviUniju(Position prvaLista, Position drugaLista, Position unija)
  134. {
  135.     Position p1 = NULL;
  136.     Position p2 = NULL;
  137.     Position p3 = NULL;
  138.     Position temp = NULL;
  139.  
  140.     p1 = prvaLista->next;
  141.     p2 = drugaLista->next;
  142.  
  143.     while ((p1 != NULL) && (p2 != NULL))
  144.     {
  145.         if (p1->broj < p2->broj)
  146.         {
  147.             p3 = KreirajCvor(p1->broj);
  148.             DodajIzaTrenutnog(unija, p3);
  149.             unija = unija->next;
  150.             p1 = p1->next;
  151.         }
  152.         else if (p1->broj > p2->broj)
  153.         {
  154.             p3 = KreirajCvor(p2->broj);
  155.             DodajIzaTrenutnog(unija, p3);
  156.             unija = unija->next;
  157.             p2 = p2->next;
  158.         }
  159.         else
  160.         {
  161.             p3 = KreirajCvor(p2->broj);
  162.             DodajIzaTrenutnog(unija, p3);
  163.             unija = unija->next;
  164.             p2 = p2->next;
  165.             p1 = p1->next;
  166.         }
  167.     }
  168.  
  169.     if (p1 == NULL)
  170.         temp = p2;
  171.     if (p2 == NULL)
  172.         temp = p1;
  173.  
  174.     while (temp != NULL)
  175.     {
  176.         p3 = KreirajCvor(temp->broj);
  177.         DodajIzaTrenutnog(unija, p3);
  178.         unija = unija->next;
  179.         temp = temp->next;
  180.     }
  181.     return 0;
  182. }
  183. void FreeAlocatedData(Position position)
  184. {
  185.     Position temp = NULL;
  186.  
  187.     while (position->next != NULL)
  188.     {
  189.         temp = position->next;
  190.         free(temp);
  191.         position = position->next->next;
  192.     }
  193. }
  194. int NapraviPresjek(Position prvaLista, Position drugaLista, Position presjek)
  195. {
  196.     Position p1 = NULL;
  197.     Position p2 = NULL;
  198.     Position p3 = NULL;
  199.  
  200.     p1 = prvaLista->next;
  201.     p2 = drugaLista->next;
  202.  
  203.     while ((p1 != NULL) && (p2 != NULL))
  204.     {
  205.         if (p1->broj < p2->broj)
  206.             p1 = p1->next;
  207.         else if (p1->broj > p2->broj)
  208.             p2 = p2->next;
  209.         else
  210.         {
  211.             p3 = KreirajCvor(p1->broj);
  212.             DodajIzaTrenutnog(presjek, p3);
  213.             presjek = presjek->next;
  214.             p1 = p1->next;
  215.             p2 = p2->next;
  216.         }
  217.     }
  218.  
  219.     return 0;
  220. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement