Advertisement
TeamFocus-Matija

LISTE

Aug 22nd, 2016
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.60 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2.  
  3. /*FUNKCIJE ZA LISTE
  4.     1.KREIRAJ !!!
  5.     2.UBACI(GDE)-(POCETAK,KRAJ,MESTO) !!!
  6.     3.IZBACI(GDE)-(POCETAK,KRAJ,MESTO) !!!
  7.     4.PRIKAZI !!!
  8.     5.PROMENI(GDE)-(POCETAK,KRAJ,MESTO,VREDNOST) !!!
  9.     6.MIN i gde se nalazi ?
  10.     7.MAX i gde se nalazi ?
  11.     8.  Ako ima vise vrati ih sve i reci gde su ?
  12.     9.Zajednicki elementi dve liste ? i Prikaz njih ?
  13.     10.Imamo dve liste i od njih napravimo jedinstvenu
  14.     11.SORTIRAJ !!!
  15.     12.Unija dve liste !!!
  16.     13.Ubaci u sortiranu !!!
  17. */
  18.  
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22. #include <ctype.h>
  23.  
  24. typedef struct element * POKAZIVAC;
  25.  
  26. typedef struct element{
  27.     int podatak;
  28.     POKAZIVAC sledeci;
  29. }ELEMENT;
  30.  
  31. typedef struct glavaRep * LISTA;
  32.  
  33. struct glavaRep{
  34.     POKAZIVAC glava;
  35.     POKAZIVAC rep;
  36. };
  37.  
  38. void kreirajListu(LISTA *lista){
  39.     (*lista) = malloc(sizeof(LISTA));
  40.     (*lista)->glava = NULL;
  41.     (*lista)->rep = NULL;
  42. }
  43.  
  44. void ubaciBrojNaPocetakListe(LISTA lista, int noviPodatak){
  45.     POKAZIVAC noviElement = malloc(sizeof(ELEMENT));
  46.    
  47.     noviElement->podatak = noviPodatak;
  48.     noviElement->sledeci = lista->glava;
  49.    
  50.     lista->glava = noviElement;
  51.    
  52.     if (lista->rep == NULL)
  53.     {
  54.         lista->rep = noviElement;
  55.     }  
  56. }
  57.  
  58. void ubaciBrojNaKrajListe(LISTA lista, int noviPodatak){
  59.     POKAZIVAC noviElement = malloc(sizeof(ELEMENT));
  60.    
  61.     noviElement->podatak = noviPodatak;
  62.     noviElement->sledeci = NULL;
  63.    
  64.     if (lista->glava == NULL){
  65.         lista->glava = noviElement;
  66.         lista->rep = noviElement;
  67.     }
  68.     else {
  69.         lista->rep->sledeci = noviElement;
  70.         lista->rep = noviElement;
  71.     }
  72. }
  73.  
  74. void ubaciNaOdredjenoMestoUListi(LISTA lista, int noviPodatak, int pozicija){
  75.     POKAZIVAC noviElement = malloc(sizeof(ELEMENT));
  76.     int redniBroj = 1;
  77.     POKAZIVAC trenutni = lista->glava;
  78.     POKAZIVAC prethodni = NULL;
  79.  
  80.     noviElement->podatak = noviPodatak;
  81.  
  82.     if (pozicija == 1){
  83.         ubaciBrojNaPocetakListe(lista, noviPodatak);
  84.         return;
  85.     }
  86.  
  87.     while (trenutni!=NULL && redniBroj<pozicija)
  88.     {
  89.         prethodni = trenutni;
  90.         trenutni = trenutni->sledeci;
  91.         redniBroj++;
  92.     }
  93.             prethodni->sledeci = noviElement;
  94.             noviElement->sledeci = trenutni;
  95.     }
  96.  
  97. void prikaziListu(LISTA lista){
  98.     POKAZIVAC privremeniPomagac = lista->glava;
  99.    
  100.     printf("\n************************************************************************\n");
  101.    
  102.     while (privremeniPomagac != NULL){
  103.         printf("%d\t", privremeniPomagac->podatak);
  104.         privremeniPomagac = privremeniPomagac->sledeci;
  105.     }
  106.     printf("\n************************************************************************\n");
  107. }
  108.  
  109. void izbaciBrojSaPocetkaListe(LISTA lista){
  110.     POKAZIVAC pomocni = lista->glava;
  111.  
  112.     if (lista->glava == NULL){
  113.         printf("LISTA JE PRAZNA !!!\n");
  114.         return;
  115.     }
  116.  
  117.     lista->glava = lista->glava->sledeci;
  118.    
  119.     printf("Broj koji je izbacen je %d!", pomocni->podatak);
  120.  
  121.     pomocni = NULL;
  122.     free(pomocni);
  123.  
  124.     if (lista->glava == NULL){
  125.         lista->rep = NULL;
  126.     }
  127. }
  128.  
  129. void izbaciBrojSaKrajaListe(LISTA lista){
  130.     POKAZIVAC pomocni = lista->glava;
  131.     POKAZIVAC pomocni2 = NULL;
  132.    
  133.     if (lista->glava == NULL){
  134.         printf("LISTA JE PRAZNA !!!\n");
  135.         return;
  136.     }
  137.    
  138.     while (pomocni->sledeci != NULL){
  139.         pomocni2 = pomocni;
  140.         pomocni = pomocni->sledeci;
  141.     }
  142.  
  143.     lista->rep = pomocni2;
  144.    
  145.     if (lista->rep != NULL){
  146.         lista->rep->sledeci = NULL;
  147.     }
  148.     else{
  149.         lista->glava = NULL;
  150.     }
  151.    
  152.     pomocni = NULL;
  153.     free(pomocni);
  154. }
  155.  
  156. void izbaciSaOdredjenogMestaUListi(LISTA lista, int pozicija){
  157.     int redniBroj = 1;
  158.     POKAZIVAC trenutni = lista->glava;
  159.     POKAZIVAC prethodni = NULL;
  160.  
  161.     if (lista->glava == NULL){
  162.         printf("Lista je prazna!!!\n");
  163.             return;
  164.     }
  165.  
  166.     while (trenutni != NULL && redniBroj<pozicija)
  167.     {
  168.         prethodni = trenutni;
  169.         trenutni = trenutni->sledeci;
  170.         redniBroj++;
  171.     }
  172.     if (trenutni == NULL){
  173.         printf("Element ne postoji!!!\n");
  174.         return;
  175.     }
  176.     if (trenutni == lista->glava){
  177.         izbaciBrojSaPocetkaListe(lista);
  178.         return;
  179.     }
  180.     prethodni->sledeci = trenutni->sledeci;
  181.     free(trenutni);
  182. }
  183.  
  184. void promeniOdredjenBroj(LISTA lista, int brojKojiSeMenja,int brojKojiPostaje){
  185.     POKAZIVAC pomocni = lista->glava;
  186.  
  187.     if (lista->glava == NULL){
  188.         printf("Lista je prazna!!!\n");
  189.         return;
  190.     }
  191.     while (pomocni != NULL){
  192.         if (pomocni->podatak == brojKojiSeMenja){
  193.             pomocni->podatak = brojKojiPostaje;
  194.         }
  195.         pomocni = pomocni->sledeci;
  196.     }
  197. }
  198.  
  199. void naciMaxULISTI(LISTA lista){
  200.     int MAX = 0;
  201.     POKAZIVAC trenutni = lista->glava;
  202.     if (lista->glava == NULL){
  203.         printf("Lista je prazna!!!\n");
  204.         return;
  205.     }
  206.     while (trenutni != NULL){
  207.         if (MAX < trenutni->podatak){
  208.             MAX = trenutni->podatak;
  209.         }
  210.         trenutni = trenutni->sledeci;
  211.     }
  212.     printf("MAX U OVOJ LISTI JE %d\n", MAX);
  213. }
  214.  
  215. int proveraDaLiUListiVecPostojiOvajBroj(LISTA lista, int broj){
  216.     POKAZIVAC trenutni = lista->glava;
  217.     int postoji = 0;
  218.  
  219.     while (trenutni != NULL){
  220.         if (trenutni->podatak == broj){
  221.             postoji = 1;
  222.             return postoji;
  223.         }
  224.         trenutni = trenutni->sledeci;
  225.     }
  226.     return postoji;
  227. }
  228.  
  229. void presekDveListe(LISTA lista1, LISTA lista2){
  230.     POKAZIVAC spori, brzi;
  231.     LISTA lista3;
  232.  
  233.     int postoji;
  234.     spori = lista1->glava;
  235.     brzi = lista2->glava;
  236.    
  237.     kreirajListu(&lista3);
  238.    
  239.     while (spori != NULL){
  240.         brzi = lista2->glava;
  241.  
  242.         while (brzi != NULL){
  243.             if (spori->podatak == brzi->podatak){
  244.                 postoji = proveraDaLiUListiVecPostojiOvajBroj(lista3, spori->podatak);
  245.                 if (postoji != 1){
  246.                     ubaciBrojNaPocetakListe(lista3, spori->podatak);
  247.                     break;
  248.                 }
  249.             }
  250.             brzi = brzi->sledeci;
  251.         }
  252.         spori = spori->sledeci;
  253.     }
  254.     printf("PRESEK PRVE I DRUGE LISTE!!!\n");
  255.     prikaziListu(lista3);
  256. }
  257.  
  258. void unijaDveListe(LISTA lista1, LISTA lista2){
  259.     POKAZIVAC trenutni;
  260.     int postoji;
  261.    
  262.     trenutni = lista2->glava;
  263.  
  264.     while (trenutni != NULL){
  265.         postoji = proveraDaLiUListiVecPostojiOvajBroj(lista1, trenutni->podatak);
  266.  
  267.         if (postoji != 1){
  268.             ubaciBrojNaKrajListe(lista1,trenutni->podatak);
  269.         }
  270.  
  271.         trenutni = trenutni->sledeci;
  272.     }
  273.     printf("************************OVO JE UNIJA DVE LISTE************************\n");
  274.     prikaziListu(lista1);
  275. }
  276.  
  277. void sortirajListu(LISTA lista){
  278.     POKAZIVAC spori, brzi;
  279.     int pomocni;
  280.  
  281.     spori = lista->glava;
  282.    
  283.     while (spori != NULL){
  284.         brzi = spori->sledeci;
  285.         while (brzi != NULL){
  286.             if (spori->podatak > brzi->podatak){
  287.                 pomocni = spori->podatak;
  288.                 spori->podatak = brzi->podatak;
  289.                 brzi->podatak = pomocni;
  290.             }
  291.             brzi = brzi->sledeci;
  292.         }
  293.         spori = spori->sledeci;
  294.     }
  295.     prikaziListu(lista);
  296. }
  297.  
  298. void ubaciBrojUSortiranuListu(LISTA lista, int broj){
  299.     POKAZIVAC trenutni, prethodni, noviElement = malloc(sizeof(ELEMENT));
  300.  
  301.    
  302.     trenutni = lista->glava;
  303.     prethodni = NULL;
  304.  
  305.     while (trenutni != NULL  && trenutni->podatak<broj){
  306.        
  307.         prethodni = trenutni;
  308.         trenutni = trenutni->sledeci;
  309.     }
  310.     if (trenutni == lista->glava){
  311.         ubaciBrojNaPocetakListe(lista, broj);
  312.     }
  313.     else if (trenutni == NULL){
  314.         ubaciBrojNaKrajListe(lista, broj);
  315.     }
  316.     else {
  317.         noviElement->podatak = broj;
  318.         prethodni->sledeci = noviElement;
  319.         noviElement->sledeci = trenutni;
  320.     }
  321. }
  322.  
  323. int main(void){
  324.     LISTA lista1,lista2;
  325.  
  326.     kreirajListu(&lista1);
  327.     kreirajListu(&lista2);
  328.  
  329.     ubaciBrojNaPocetakListe(lista1, 5);
  330.     ubaciBrojNaPocetakListe(lista1, 4);
  331.     ubaciBrojNaPocetakListe(lista1, 3);
  332.  
  333.     ubaciBrojNaPocetakListe(lista2, 5);
  334.     ubaciBrojNaPocetakListe(lista2, 4);
  335.     ubaciBrojNaPocetakListe(lista2, 3);
  336.     ubaciBrojNaPocetakListe(lista2, 6);
  337.     ubaciBrojNaPocetakListe(lista2, 35);
  338.     ubaciBrojNaPocetakListe(lista2, 50);
  339.  
  340.     ubaciBrojNaKrajListe(lista1, 6);
  341.     ubaciBrojNaKrajListe(lista1, 7);
  342.     ubaciBrojNaKrajListe(lista1, 8);
  343.  
  344.     ubaciNaOdredjenoMestoUListi(lista1, 15, 4);
  345.     ubaciNaOdredjenoMestoUListi(lista1, 2, 1);
  346.     ubaciNaOdredjenoMestoUListi(lista1, 20, 9);
  347.  
  348.     /*izbaciBrojSaPocetkaListe(lista1);
  349.     izbaciBrojSaPocetkaListe(lista1);*/
  350.  
  351.     /*izbaciBrojSaKrajaListe(lista1);
  352.     izbaciBrojSaKrajaListe(lista1);*/
  353.  
  354.     /*izbaciSaOdredjenogMestaUListi(lista1, 9);
  355.     izbaciSaOdredjenogMestaUListi(lista1, 8);
  356.     izbaciSaOdredjenogMestaUListi(lista1, 1);*/
  357.  
  358.     promeniOdredjenBroj(lista1, 2, 25);
  359.     promeniOdredjenBroj(lista1, 20, 25);
  360.     promeniOdredjenBroj(lista1, 25, 35);
  361.  
  362.     prikaziListu(lista1);
  363.     prikaziListu(lista2);
  364.  
  365.     presekDveListe(lista1, lista2);
  366.  
  367.     unijaDveListe(lista1, lista2);
  368.  
  369.     /*naciMaxULISTI(lista1);*/
  370.     printf("OVO JE SORTIRANA LISTA\n");
  371.     sortirajListu(lista1);
  372.  
  373.     ubaciBrojUSortiranuListu(lista1, 30);
  374.     ubaciBrojUSortiranuListu(lista1, 2);
  375.     ubaciBrojUSortiranuListu(lista1, 9);
  376.     ubaciBrojUSortiranuListu(lista1, 70);
  377.     prikaziListu(lista1);
  378.  
  379.     return 0;
  380. }
  381.  
  382. /*
  383. typedef struct igrac{
  384.     ....
  385.     ....
  386.     ....
  387.     ....
  388. }IGRAC;
  389.  
  390. typedef struct element * POKAZIVAC;
  391.  
  392. typedef struct element{
  393. IGRAC podatak;
  394. POKAZIVAC sledeci;
  395. }ELEMENT;
  396.  
  397. typedef struct glavaRep * LISTA;
  398.  
  399. struct glavaRep{
  400. POKAZIVAC glava;
  401. POKAZIVAC rep;
  402. };
  403. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement