main.c #include #include #include "def1.c" int main() { int izbor, pravilan_unos; TOsoba *glava_liste = NULL; do { do{ printf("1. Unos na pocetak liste\n"); printf("2. Unos na kraj liste\n"); printf("3. Pregled sadrzaja elemenata cvorova liste\n"); printf("4. Brisanje svih cvorova liste liste\n"); printf("5. Brisanje cvorova liste po kriterijumu liste\n"); printf("6. Izlaz liste\n"); printf("Vas izbora: \n"); if (scanf("%d", &izbor) == 0) { printf("Niste unijeli cjelobrojnu vrijednost\n"); pravilan_unos = 0; while (getchar()!='\n'); } else { if(izbor >= 1 && izbor <= 6) { pravilan_unos = 1; getchar(); } else { printf("Unijeli ste cjelobrojnu vrijednost koja nije u nizu"); pravilan_unos = 0; } } } while(pravilan_unos == 0); if (izbor == 1) glava_liste = unos_na_pocetak(glava_liste); else if (izbor == 2) glava_liste = unos_na_kraj(glava_liste); else if (izbor == 3) pregled(glava_liste); else if (izbor == 4) glava_liste = brisi_sve(glava_liste); else if (izbor == 5) glava_liste = brisi_po_krit(glava_liste); else if (izbor == 6) return 0; } while (1); return 0; } --- def1.c #include #include typedef struct osoba { char prezime[20]; int starost; struct osoba *sledeca; }TOsoba; --- unosp.c #include #include #include "def1.c" TOsoba *unos_na_pocetak(TOsoba *glava) { TOsoba *nova; nova = malloc(sizeof(TOsoba)); // rezervise u memoriji mjesto koje nam je potrebno za osobu i vraca pocetnu adresu u promjenljivu nova printf("Novi cvor pocinje na adresi %d \n", &nova); printf("Unesite prezime i ime osobe \n"); gets( nova->prezime ); printf("Unesite starost osobe \n"); scanf("%d", &nova -> starost); nova -> sledeca = NULL; nova -> sledeca = glava; glava = nova; return glava; } ---pregled1.com #include #include #include "def1.c" void pregled(TOsoba *glava) { while (glava) { printf("%p %s %d %p\n", glava, glava -> prezime, glava -> starost, glava -> sledeca); glava = glava -> sledeca; } } ---unosk.c #include #include #include "def1.c" TOsoba *unos_na_kraj(TOsoba *glava) { TOsoba *nova; nova = malloc(sizeof(TOsoba)); // rezervise u memoriji mjesto koje nam je potrebno za osobu i vraca pocetnu adresu u promjenljivu nova printf("Novi cvor pocinje na adresi %p \n", nova); printf("Unesite prezime i ime osobe \n"); gets( nova->prezime ); printf("Unesite starost osobe \n"); scanf("%d", &nova -> starost); nova -> sledeca = NULL; if (glava == NULL) { glava = nova; } else { TOsoba *nadji_zadnji = glava; while (nadji_zadnji -> sledeca != NULL) nadji_zadnji = nadji_zadnji -> sledeca; nadji_zadnji -> sledeca = nova; } return glava; } --- brisi1.c #include #include #include "def1.c" void *brisi_sve(TOsoba *glava) { while (glava) { TOsoba *za_brisanje = glava; printf("Sad briesm: %p %s %d %p\n", glava, glava -> prezime, glava -> starost, glava -> sledeca); glava = glava -> sledeca; free(za_brisanje); } return glava; //return NULL; } --- brisikrit.c #include #include #include "def1.c" void *brisi_po_krit(TOsoba *glava) { int godina; TOsoba *tekuca = glava, *za_brisanje = NULL, *pret = NULL; printf("Koliko godina imaju osobe koje treba izbrisati iz liste: \n"); scanf("%d", &godina); while(tekuca) { if(tekuca -> starost == godina) { za_brisanje = tekuca; tekuca = tekuca -> sledeca; if (pret == NULL) glava = tekuca; else pret -> sledeca = tekuca; free(za_brisanje); return glava; } else { pret = tekuca; tekuca = tekuca -> sledeca; } } return glava; }