Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- struct Cvor {
- int element;
- Cvor* sljedeci;
- };
- int dodajNaKraj(Cvor** glava, int noviElement) {
- //Alocirati memoriju za novi element
- Cvor* novi = (Cvor*)malloc(sizeof(Cvor));
- if (novi == NULL)//ako nema mjesta u memoriji ne mozemo kreirati novi element
- {
- return 0;//vratiti 0 jer nismo uspjeli dodati na kraj
- }
- //unijeti vrijednosti za novi element
- novi->element = noviElement;
- novi->sljedeci = NULL;
- //postavimo se na prviElement
- Cvor* element = *glava;
- if (element == NULL) {//Provjeriti ima li prvog elementa tj. je li lista prazna
- //ako nema prvog elementa lista je prazna i mozemo novi dodati kao prvi element,
- //tj. glavu usmjeriti na novi cvor
- *glava = novi;
- return 1;//Vratimo 1 jer smo uspjesno dodali element
- }
- //Zatim se pomjeramo sve dok ne dodjemo do zadnjeg elementa u listi
- //Sve dok trenutni element ima sljedeceg trebamo se pomjerati dalje
- //jer nismo dosli na zadnje mjesto
- while (element->sljedeci != NULL)
- {
- element = element->sljedeci;
- }
- //kad smo dosli do zadnjeg, kao njegov sljedeci postavljamo novi element
- element->sljedeci = novi;
- return 1;//vracamo 1 jer smo uspjesno dodali
- }
- int dodajNaPocetak(Cvor** glava, int noviElement) {
- //Alocirati memoriju za novi element
- Cvor* novi = (Cvor*)malloc(sizeof(Cvor));
- if (novi == NULL)//ako nema mjesta u memoriji ne mozemo kreirati novi element
- {
- return 0;//vratiti 0 jer nismo uspjeli dodati na kraj
- }
- //unijeti vrijednosti za novi element
- novi->element = noviElement;
- novi->sljedeci = NULL;
- //postavimo se na prviElement
- Cvor* element = *glava;
- if (element == NULL) {//Provjeriti ima li prvog elementa tj. je li lista prazna
- //ako nema prvog elementa lista je prazna i mozemo novi dodati kao prvi element,
- //tj. glavu usmjeriti na novi cvor
- *glava = novi;
- return 1;//Vratimo 1 jer smo uspjesno dodali element
- }
- //Novi cvor sad postaje prvi pa ce njegov sljedeci biti prethodni prvi element
- novi->sljedeci = element;
- //glavu usmjeravamo na novo dodani element
- *glava = novi;
- return 1;//vracamo 1 jer smo uspjesno dodali
- }
- int dodajUListuSortiranuUzlazno(Cvor** glava, int noviElement) {
- //Alocirati memoriju za novi element
- Cvor* novi = (Cvor*)malloc(sizeof(Cvor));
- if (novi == NULL)//ako nema mjesta u memoriji ne mozemo kreirati novi element
- {
- return 0;//vratiti 0 jer nismo uspjeli dodati na kraj
- }
- //unijeti vrijednosti za novi element
- novi->element = noviElement;
- novi->sljedeci = NULL;
- //postavimo se na prviElement
- Cvor* element = *glava;
- if (element == NULL) {
- //Provjeriti ima li prvog elementa tj. je li lista prazna
- //ako nema prvog elementa lista je prazna i mozemo novi dodati kao prvi element,
- //tj. glavu usmjeriti na novi cvor
- *glava = novi;
- return 1;//Vratimo 1 jer smo uspjesno dodali element
- }
- if (noviElement < element->element) {
- //Provjeriti je li novi element manji od prvog elementa.
- //Ako je novi element manji od prvog elementa
- //potrebno je novi dodati kao prvi element jer je lista sortirana uzlazno
- novi->sljedeci = element;
- *glava = novi;
- return 1;//Vratimo 1 jer smo uspjesno dodali element
- }
- //pomjeramo se po listu sve dok ne dodjemo do zadnjeg ili
- //do elementa ciji sljedeci cvor ima vrijednost vecu od nove
- // uvjet element->sljedeci!=NULL provjerava jesmo li dosli do zadnjeg
- //uvjet element->sljedeci->element < noviElement provjerava da li je novi element manji od sljedeceg u nizu
- while (element->sljedeci != NULL && element->sljedeci->element < noviElement)
- {
- element = element->sljedeci;
- }
- //novi element dodajemo izmedju elementa i njegovog sljedeceg
- novi->sljedeci = element->sljedeci;
- element->sljedeci = novi;
- return 1;//vracamo 1 jer smo uspjesno dodali
- }
- int dodajUListuSortiranuSilazno(Cvor** glava, int noviElement) {
- //Alocirati memoriju za novi element
- Cvor* novi = (Cvor*)malloc(sizeof(Cvor));
- if (novi == NULL)//ako nema mjesta u memoriji ne mozemo kreirati novi element
- {
- return 0;//vratiti 0 jer nismo uspjeli dodati na kraj
- }
- //unijeti vrijednosti za novi element
- novi->element = noviElement;
- novi->sljedeci = NULL;
- //postavimo se na prviElement
- Cvor* element = *glava;
- if (element == NULL) {
- //Provjeriti ima li prvog elementa tj. je li lista prazna
- //ako nema prvog elementa lista je prazna i mozemo novi dodati kao prvi element,
- //tj. glavu usmjeriti na novi cvor
- *glava = novi;
- return 1;//Vratimo 1 jer smo uspjesno dodali element
- }
- if (noviElement > element->element) {
- //Provjeriti je li novi element veci od prvog elementa.
- //Ako je novi element veci od prvog elementa
- //potrebno je novi dodati kao prvi element jer je lista sortirana silazno
- novi->sljedeci = element;
- *glava = novi;
- return 1;//Vratimo 1 jer smo uspjesno dodali element
- }
- //pomjeramo se po listu sve dok ne dodjemo do zadnjeg ili
- //do elementa ciji sljedeci cvor ima vrijednost manju od nove
- // uvjet element->sljedeci!=NULL provjerava jesmo li dosli do zadnjeg
- //uvjet element->sljedeci->element > noviElement provjerava da li je novi element manji od sljedeceg u nizu
- while (element->sljedeci != NULL && element->sljedeci->element > noviElement)
- {
- element = element->sljedeci;
- }
- //novi element dodajemo izmedju elementa i njegovog sljedeceg
- novi->sljedeci = element->sljedeci;
- element->sljedeci = novi;
- return 1;//vracamo 1 jer smo uspjesno dodali
- }
- int obrisiPrvog(Cvor** glava) {
- Cvor* element = *glava;
- if (element == NULL) {
- //Provjeriti ima li prvog elementa tj. je li lista prazna
- return 0;//Vratimo 0 jer je lista prazna i nema se sta brisati
- }
- //glavu postavimo na sljedeci
- *glava = element->sljedeci;
- //izbrisemo trenutni prvi
- free(element);
- }
- int obrisiZadnjeg(Cvor** glava)
- {
- Cvor* trenutni = *glava;
- Cvor* prethodni = NULL;
- if (trenutni == NULL) {
- //Provjeriti ima li prvog elementa tj. je li lista prazna
- return 0;//Vratimo 0 jer je lista prazna i nema se sta brisati
- }
- //Provjeriti ima li lista samo jedan element
- if (trenutni->sljedeci == NULL)
- {
- *glava = NULL;
- free(trenutni);
- return 1;//Vratimo 1 jer je lista ima samo jedan element koji smo izbrisali
- }
- //idemo sve dok ne dodjemo do zadnjeg
- while (trenutni->sljedeci != NULL)
- {
- //prethodni postaje trenutni
- prethodni = trenutni;
- //trenutni postaje sljedeci
- trenutni = prethodni->sljedeci;
- }
- free(trenutni);//brisemo zadnjeg
- prethodni->sljedeci = NULL; //od prethodnog sljedeceg nulliramo jer vise nema zadnjeg
- return 1;//vratimo 1 jer smo uspjesno izbrisali
- }
- int obrisiListu(Cvor** glava)
- {
- Cvor* element = *glava; //postavimo na prvu
- if (element == NULL)
- {
- //ako je prvi element NULL znaci da je lista prazna
- return 0;
- }
- while (element != NULL)
- {
- *glava = element->sljedeci; //glavu usmjerimo na sljedeceg
- free(element);//izbrisemo trenutnog
- element = *glava; //element ponovo postavimo na pocetak glave
- }
- return 1;
- }
- int obrisiPrvogZadanog(Cvor** glava, int elementZaBrisanje)
- {
- Cvor* trenutni = *glava;
- Cvor* prethodni = NULL;
- if (trenutni == NULL) return 0; //lista je prazna //
- //provjeriti je li prvi element trazeni element
- if (trenutni->element == elementZaBrisanje) {
- //glavu usmjeriti na drugi element odnosno od trenutnog sljedeci
- *glava = trenutni->sljedeci;
- //izbrisati trenutni
- free(trenutni);
- return 1;//vratiti 1 za uspjesno brisanje
- }
- //sve dok nismo dosli do kraja i dok je od trenutnog element razlicit od onog kojeg trazimo idi dalje
- //ako od trenutnog element bude jednak onom kojeg trazimo petlja ce se prekinuti
- while (trenutni != NULL && trenutni->element != elementZaBrisanje)
- {
- prethodni = trenutni;
- trenutni = trenutni->sljedeci;
- }
- if (trenutni == NULL)
- {
- //Nismo uspjeli naci element
- return 0;
- }
- //Prethodnom sljedeci postaviti od trenutnog sljedeci
- prethodni->sljedeci = trenutni->sljedeci;
- //briseno trenutni
- free(trenutni);
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement