Advertisement
Guest User

LISTA - Funkcije

a guest
Feb 23rd, 2020
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.96 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. struct Cvor {
  4.     int element;
  5.  
  6.     Cvor* sljedeci;
  7. };
  8.  
  9.  
  10. int dodajNaKraj(Cvor** glava, int noviElement) {
  11.     //Alocirati memoriju za novi element
  12.     Cvor* novi = (Cvor*)malloc(sizeof(Cvor));
  13.     if (novi == NULL)//ako nema mjesta u memoriji ne mozemo kreirati novi element
  14.     {
  15.         return 0;//vratiti 0 jer nismo uspjeli dodati na kraj
  16.     }
  17.  
  18.     //unijeti vrijednosti za novi element
  19.     novi->element = noviElement;
  20.     novi->sljedeci = NULL;
  21.  
  22.     //postavimo se na prviElement
  23.     Cvor* element = *glava;
  24.     if (element == NULL) {//Provjeriti ima li prvog elementa tj. je li lista prazna
  25.         //ako nema prvog elementa lista je prazna i mozemo novi dodati kao prvi element,
  26.         //tj. glavu usmjeriti na novi cvor
  27.         *glava = novi;
  28.         return 1;//Vratimo 1 jer smo uspjesno dodali element
  29.     }
  30.  
  31.     //Zatim se pomjeramo sve dok ne dodjemo do zadnjeg elementa u listi
  32.     //Sve dok trenutni element ima sljedeceg trebamo se pomjerati dalje
  33.     //jer nismo dosli na zadnje mjesto
  34.     while (element->sljedeci != NULL)
  35.     {
  36.         element = element->sljedeci;
  37.     }
  38.     //kad smo dosli do zadnjeg, kao njegov sljedeci postavljamo novi element
  39.     element->sljedeci = novi;
  40.  
  41.     return 1;//vracamo 1 jer smo uspjesno dodali
  42.  
  43. }
  44.  
  45. int dodajNaPocetak(Cvor** glava, int noviElement) {
  46.     //Alocirati memoriju za novi element
  47.     Cvor* novi = (Cvor*)malloc(sizeof(Cvor));
  48.     if (novi == NULL)//ako nema mjesta u memoriji ne mozemo kreirati novi element
  49.     {
  50.         return 0;//vratiti 0 jer nismo uspjeli dodati na kraj
  51.     }
  52.  
  53.     //unijeti vrijednosti za novi element
  54.     novi->element = noviElement;
  55.     novi->sljedeci = NULL;
  56.  
  57.     //postavimo se na prviElement
  58.     Cvor* element = *glava;
  59.     if (element == NULL) {//Provjeriti ima li prvog elementa tj. je li lista prazna
  60.         //ako nema prvog elementa lista je prazna i mozemo novi dodati kao prvi element,
  61.         //tj. glavu usmjeriti na novi cvor
  62.         *glava = novi;
  63.         return 1;//Vratimo 1 jer smo uspjesno dodali element
  64.     }
  65.  
  66.     //Novi cvor sad postaje prvi pa ce njegov sljedeci biti prethodni prvi element
  67.     novi->sljedeci = element;
  68.     //glavu usmjeravamo na novo dodani element
  69.     *glava = novi;
  70.     return 1;//vracamo 1 jer smo uspjesno dodali
  71.  
  72. }
  73.  
  74. int dodajUListuSortiranuUzlazno(Cvor** glava, int noviElement) {
  75.     //Alocirati memoriju za novi element
  76.     Cvor* novi = (Cvor*)malloc(sizeof(Cvor));
  77.     if (novi == NULL)//ako nema mjesta u memoriji ne mozemo kreirati novi element
  78.     {
  79.         return 0;//vratiti 0 jer nismo uspjeli dodati na kraj
  80.     }
  81.  
  82.     //unijeti vrijednosti za novi element
  83.     novi->element = noviElement;
  84.     novi->sljedeci = NULL;
  85.  
  86.     //postavimo se na prviElement
  87.     Cvor* element = *glava;
  88.     if (element == NULL) {
  89.         //Provjeriti ima li prvog elementa tj. je li lista prazna
  90.         //ako nema prvog elementa lista je prazna i mozemo novi dodati kao prvi element,
  91.         //tj. glavu usmjeriti na novi cvor
  92.         *glava = novi;
  93.         return 1;//Vratimo 1 jer smo uspjesno dodali element
  94.     }
  95.  
  96.     if (noviElement < element->element) {
  97.         //Provjeriti je li novi element manji od prvog elementa.
  98.         //Ako je novi element manji od prvog elementa
  99.         //potrebno je novi dodati kao prvi element jer je lista sortirana uzlazno
  100.         novi->sljedeci = element;
  101.         *glava = novi;
  102.         return 1;//Vratimo 1 jer smo uspjesno dodali element
  103.     }
  104.  
  105.     //pomjeramo se po listu sve dok ne dodjemo do zadnjeg ili
  106.     //do elementa ciji sljedeci cvor ima vrijednost vecu od nove
  107.     // uvjet element->sljedeci!=NULL provjerava jesmo li dosli do zadnjeg
  108.     //uvjet element->sljedeci->element < noviElement provjerava da li je novi element manji od sljedeceg u nizu
  109.     while (element->sljedeci != NULL && element->sljedeci->element < noviElement)
  110.     {
  111.         element = element->sljedeci;
  112.     }
  113.  
  114.     //novi element dodajemo izmedju elementa i njegovog sljedeceg
  115.     novi->sljedeci = element->sljedeci;
  116.     element->sljedeci = novi;
  117.     return 1;//vracamo 1 jer smo uspjesno dodali
  118.  
  119. }
  120.  
  121.  
  122.  
  123. int dodajUListuSortiranuSilazno(Cvor** glava, int noviElement) {
  124.     //Alocirati memoriju za novi element
  125.     Cvor* novi = (Cvor*)malloc(sizeof(Cvor));
  126.     if (novi == NULL)//ako nema mjesta u memoriji ne mozemo kreirati novi element
  127.     {
  128.         return 0;//vratiti 0 jer nismo uspjeli dodati na kraj
  129.     }
  130.  
  131.     //unijeti vrijednosti za novi element
  132.     novi->element = noviElement;
  133.     novi->sljedeci = NULL;
  134.  
  135.     //postavimo se na prviElement
  136.     Cvor* element = *glava;
  137.     if (element == NULL) {
  138.         //Provjeriti ima li prvog elementa tj. je li lista prazna
  139.         //ako nema prvog elementa lista je prazna i mozemo novi dodati kao prvi element,
  140.         //tj. glavu usmjeriti na novi cvor
  141.         *glava = novi;
  142.         return 1;//Vratimo 1 jer smo uspjesno dodali element
  143.     }
  144.  
  145.     if (noviElement > element->element) {
  146.         //Provjeriti je li novi element veci od prvog elementa.
  147.         //Ako je novi element veci od prvog elementa
  148.         //potrebno je novi dodati kao prvi element jer je lista sortirana silazno
  149.         novi->sljedeci = element;
  150.         *glava = novi;
  151.         return 1;//Vratimo 1 jer smo uspjesno dodali element
  152.     }
  153.  
  154.     //pomjeramo se po listu sve dok ne dodjemo do zadnjeg ili
  155.     //do elementa ciji sljedeci cvor ima vrijednost manju od nove
  156.     // uvjet element->sljedeci!=NULL provjerava jesmo li dosli do zadnjeg
  157.     //uvjet element->sljedeci->element > noviElement provjerava da li je novi element manji od sljedeceg u nizu
  158.     while (element->sljedeci != NULL && element->sljedeci->element > noviElement)
  159.     {
  160.         element = element->sljedeci;
  161.     }
  162.  
  163.     //novi element dodajemo izmedju elementa i njegovog sljedeceg
  164.     novi->sljedeci = element->sljedeci;
  165.     element->sljedeci = novi;
  166.     return 1;//vracamo 1 jer smo uspjesno dodali
  167.  
  168. }
  169.  
  170. int obrisiPrvog(Cvor** glava) {
  171.     Cvor* element = *glava;
  172.     if (element == NULL) {
  173.         //Provjeriti ima li prvog elementa tj. je li lista prazna
  174.         return 0;//Vratimo 0 jer je lista prazna i nema se sta brisati
  175.     }
  176.     //glavu postavimo na sljedeci
  177.     *glava = element->sljedeci;
  178.     //izbrisemo trenutni prvi
  179.     free(element);
  180. }
  181.  
  182. int obrisiZadnjeg(Cvor** glava)
  183. {
  184.     Cvor* trenutni = *glava;
  185.     Cvor* prethodni = NULL;
  186.     if (trenutni == NULL) {
  187.         //Provjeriti ima li prvog elementa tj. je li lista prazna
  188.         return 0;//Vratimo 0 jer je lista prazna i nema se sta brisati
  189.     }
  190.  
  191.     //Provjeriti ima li lista samo jedan element
  192.     if (trenutni->sljedeci == NULL)
  193.     {
  194.         *glava = NULL;
  195.         free(trenutni);
  196.         return 1;//Vratimo 1 jer je lista ima samo jedan element koji smo izbrisali
  197.     }
  198.  
  199.     //idemo sve dok ne dodjemo do zadnjeg
  200.     while (trenutni->sljedeci != NULL)
  201.     {
  202.         //prethodni postaje trenutni
  203.         prethodni = trenutni;
  204.         //trenutni postaje sljedeci
  205.         trenutni = prethodni->sljedeci;
  206.     }
  207.  
  208.     free(trenutni);//brisemo zadnjeg
  209.     prethodni->sljedeci = NULL; //od prethodnog sljedeceg nulliramo jer vise nema zadnjeg
  210.     return 1;//vratimo 1 jer smo uspjesno izbrisali
  211. }
  212.  
  213. int obrisiListu(Cvor** glava)
  214. {
  215.     Cvor* element = *glava; //postavimo na prvu
  216.     if (element == NULL)
  217.     {
  218.         //ako je prvi element NULL znaci da je lista prazna
  219.         return 0;
  220.     }
  221.     while (element != NULL)
  222.     {
  223.         *glava = element->sljedeci; //glavu usmjerimo na sljedeceg
  224.         free(element);//izbrisemo trenutnog
  225.         element = *glava; //element ponovo postavimo na pocetak glave
  226.     }
  227.     return 1;
  228. }
  229.  
  230.  
  231. int obrisiPrvogZadanog(Cvor** glava, int elementZaBrisanje)
  232. {
  233.     Cvor* trenutni = *glava;
  234.     Cvor* prethodni = NULL;
  235.  
  236.  
  237.     if (trenutni == NULL) return 0; //lista je prazna //
  238.  
  239.     //provjeriti je li prvi element trazeni element
  240.     if (trenutni->element == elementZaBrisanje) {
  241.         //glavu usmjeriti na drugi element odnosno od trenutnog sljedeci
  242.         *glava = trenutni->sljedeci;
  243.         //izbrisati trenutni
  244.         free(trenutni);
  245.         return 1;//vratiti 1 za uspjesno brisanje
  246.     }
  247.  
  248.  
  249.     //sve dok nismo dosli do kraja i dok je od trenutnog element razlicit od onog kojeg trazimo idi dalje
  250.     //ako od trenutnog element bude jednak onom kojeg trazimo petlja ce se prekinuti
  251.     while (trenutni != NULL && trenutni->element != elementZaBrisanje)
  252.     {
  253.         prethodni = trenutni;
  254.         trenutni = trenutni->sljedeci;
  255.     }
  256.     if (trenutni == NULL)
  257.     {
  258.         //Nismo uspjeli naci element
  259.         return 0;
  260.     }
  261.  
  262.     //Prethodnom sljedeci postaviti od trenutnog sljedeci
  263.     prethodni->sljedeci = trenutni->sljedeci;
  264.     //briseno trenutni
  265.     free(trenutni);
  266.     return 1;
  267. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement