====== Zadatak: ====== Potrebno je realizovati u programskom jeziku C skup funkcija za rad sa listom cije je ponasanje isto kao ponasanje podataka tipa liste iz pseudojezika. Funkcije za rad sa listom treba da se zovu isto kao i u pseudojeziku(find_bolp, insert, move_forward…) i treba da budu realizovane u zasebnoj implementacionoj .c datoteci. Takodje je potrebno napraviti odgovarajucu definicionu. h (header) datoteku u kojoj ce biti deklarisani svi potrebni tipovi podataka i prototipovi koriscenih funkcija. Podaci se u listi skladiste preko generickog pokazivaca (void*), a potrebnoje obezbediti brisanje podataka sadrzanih u listi kroz call-back mehanizam. Napraviti inicializacionu funkciju koja inicijalizuje listu i koja postavlja odgovarajucu funkciju koja se poziva kroz call-back mehanizam pri unistavanju liste. Pointer na ovu funkciju se prosledjuje kao argument funkcije za inicijalizaciju liste. U listu je iz teksutalne datoteke potrebno procitati podatke o studentima. Podaci su u fajl slozeni tako da u jednom redu ime i prezime studenta, u drugom broj indeksa u formatu Broj/GodinaUpisa i u trecem prosek studenta. Nakon citanja iz datoteke, upisati sve podatke o studentima iz liste u novu binarnu datoteku i to tako da se upisuju samo podaci o studentima sa prosekom vecim od 8,5. ===== Resenje: ===== * **Zadatak demonstrira pravljenje “pametne” liste** * **Lista je genericka** * **Programer se obraca objektu liste, ne njenim pokazivacima** * Objekat liste “zna” da li je tekuci element** - na pocektu liste - na kraju liste - u sredini * Objektu liste se dostavlja element za ubacivanje * Objektu liste se dostavlja nacin brisanja pojedinacnih elemenata (u vidu funkcije) * ---- ==== pl_list.h ==== #define TRUE 1 #define FALSE 0 typedef enum { lsBOLP = 0, lsEOLP, lsCURRENT } TListStatus; struct SListElement { void *pData; struct SListElement *pNext; }; struct SList { TListStatus lsStatus; struct SListElement *pHead; struct SListElement *pCurrent; void (*destructor) (void *); }; typedef struct SListElement TListElement; typedef struct SList TList; void initialize_list (TList *pList, void (*destructor) (void *)); void find_bolp (TList *pList); int move_forward (TList *pList); int insert (TList *pList, void *pData); void *get (TList *pList); void destroy_list (TList *pList); int eolp (TList *pList);