/ Published in: C++
Implementacija liste pomocu pokazivaca sadrzi funkcije poput: FirstL(L), EndL(L),NextL(p,L),PreviousL(p,L), LocateL(x,L), InsertL(x,p,L), DeleteL(p,L), RetreiveL(p,L), DeleteAllL(L) i InitL(L)
Expand |
Embed | Plain Text
#include <iostream> using namespace std; struct zivotinje { int sifra; char vrsta[30],naziv[30]; float cijena; int datum; }; struct li{ zivotinje elem; li *sljedeci; }; typedef li *element; typedef li lista; element EndL(lista *l) { element posljednji=l; while(posljednji->sljedeci!=NULL) posljednji=posljednji->sljedeci; return posljednji; } element FirstL (lista *l) { if ((*l).sljedeci==0) return EndL(l); else return l->sljedeci; } element NextL (element p, lista *l) { if(p->sljedeci==NULL) return EndL(l); else return p->sljedeci; } element PreviousL (element p, lista *l) { lista *tekuci=l->sljedeci; while(p!=tekuci->sljedeci && tekuci->sljedeci!=NULL) tekuci=tekuci->sljedeci; return tekuci; } element LocateL (zivotinje x, lista *l) { element tekuci=l; if(tekuci->sljedeci==0) { cout<<"Lista je prazna"<<endl; exit(0); } else { while(tekuci!=EndL(l)) { if(strcmp(x.naziv,tekuci->elem.naziv)==0) return tekuci; tekuci=tekuci->sljedeci; } } } element Locatel (zivotinje x, lista *l) { element tekuci=l; if(tekuci->sljedeci==0) { cout<<"Lista je prazna"<<endl; exit(0); } else { while(tekuci!=EndL(l)) { if(strcmp(x.vrsta,tekuci->elem.vrsta)==0) return tekuci; tekuci=tekuci->sljedeci; } } } int InsertL (zivotinje x, lista *p, lista *l){ lista *tekuci=p; lista *novi=new lista; if(p==EndL(l)){ novi->sljedeci=NULL; tekuci->sljedeci=novi; tekuci->elem=x; } else if (p==FirstL(l)){ novi->sljedeci=tekuci; l->sljedeci=novi; novi->elem=x; } else { lista *prethodni=PreviousL(p,l); novi->sljedeci=tekuci; prethodni->sljedeci=novi; novi->elem=x; } if(tekuci->elem.sifra==x.sifra) return 1; else return 0; } int DeleteL ( element p, lista *l) { element prethodni, tekuci; tekuci=p; if (p==FirstL(l)){ l->sljedeci=tekuci->sljedeci; delete tekuci; return 1; } else{ prethodni= PreviousL(tekuci,l); prethodni->sljedeci=tekuci->sljedeci; delete tekuci; return 1; } return 0; } zivotinje RetrieveL(element p, lista*l) { return p->elem; } void DeleteallL(lista *l) { lista *obrisi= l->sljedeci; if(obrisi==0) return; lista *s=obrisi->sljedeci; while(s) { delete obrisi; obrisi=s; s=obrisi->sljedeci; } delete obrisi; } lista *InitL (lista *l){ l=new lista; lista *zadnji=new lista; l->sljedeci=zadnji; zadnji->sljedeci=NULL; return l; }
You need to login to post a comment.
