/ Published in: C++
Datoteka zaglavlja u kojoj se nalazi moja implementacija liste pomoću polja.
Datoteka sadži funkcije: InitL(L), 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), br_unesenih_el(L), brisi_naziv(L), brisi_vrstu(L) i cijena_u_polje(L).
Datoteka sadži funkcije: InitL(L), 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), br_unesenih_el(L), brisi_naziv(L), brisi_vrstu(L) i cijena_u_polje(L).
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include <iostream> using namespace std; struct lista{ int sifra[10000], dan[10000], mjesec[10000], godina[10000]; float cijena[10000]; char vrsta[10000][20], naziv[10000][20]; int kursor; }; typedef struct lista list; void InitL(list *l){ l->kursor = 0; } int FirstL(list *list){ return 0; } int EndL(list *l){ return l->kursor; } int NextL(int p, list *l) { if(p==--l->kursor) return l->kursor; if(p>=l->kursor) cout<<"Funkcija je nedefinirana!\n"; else return(p+1); } int PreviousL(int p, list *l){ if(p==FirstL(l)){ cout<<"Funkcija je nedefinirana!\n"; return -1; } if(p==EndL(l)) return --l->kursor; else return(p--); } int LocateL(int x, list *l){ for(int i=0; i<l->kursor;i++){ if(x==l->sifra[i]) return i; } return EndL(l); } int LocateL_naziv_vrsta(char unos[20], list *l, bool naziv_ili_vrsta){ int broj = -1; if(naziv_ili_vrsta==true){ for(int i=0; i<l->kursor;i++){ if(strcmp(l->naziv[i],unos)==0) broj = i; } } else{ for(int i=0; i<l->kursor;i++){ if(strcmp(l->vrsta[i],unos)==0) broj = i; } } if(broj != -1) return broj; else return EndL(l); } void InsertL(int dan, int mjesec, int godina, int sifra, char vrsta[20],char naziv[20],float cijena, int p, list *l){ if(p<10000){ for(int i=l->kursor;i>p;i--){ l->sifra[i--] = l->sifra[i]; l->vrsta[i--][20] = l->naziv[i][20]; l->naziv[i--][20] = l->naziv[i][20]; l->cijena[i--]=l->cijena[i]; l->dan[i--] = l->dan[i]; l->mjesec[i--] = l->mjesec[i]; l->godina[i--] = l->godina[i]; } l->sifra[p] = sifra; strcpy(l->vrsta[p],vrsta); strcpy(l->naziv[p],naziv); l->cijena[p]=cijena; l->dan[p] = dan; l->mjesec[p] = mjesec; l->godina[p] = godina; l->kursor++; } else cout<<"Lista je vec napunjena!\n"; } int DeleteL(int p, list *l){ if ((p < l->kursor) && (p >= 0)) { for (int i=p; i<l->kursor; i++){ l->sifra[i] = l->sifra[i+1]; strcpy(l->vrsta[i],l->vrsta[i+1]); strcpy(l->naziv[i],l->naziv[i+1]); l->cijena[i]=l->cijena[i+1]; l->dan[i] = l->dan[i+1]; l->mjesec[i] = l->mjesec[i+1]; l->godina[i] = l->godina[i+1]; } l->kursor--; return l->kursor; } else { cout<<"Element liste ne postoji!"; return 0; } } void RetriveL(int p, list *l){ if(p>=l->kursor){ cout<<"Element liste ne postoji!"; } else { cout<<"Sifra: "<<l->sifra[p]<<endl; cout<<"Vrsta zivotinje: "<<l->vrsta[p]<<endl; cout<<"Naziv zivotinje: "<<l->naziv[p]<<endl; cout<<"Cijena: "<<l->cijena[p]<<endl; cout<<"Datum dostave: "<<l->dan[p]<<"."<<l->mjesec[p]<<"."<<l->godina[p]<<"."<<endl; cout<<endl; } } void RetriveL_Naziv(int p, lista *l, bool naziv_vrsta){ if(p>=l->kursor){ cout<<"Element liste ne postoji!"; } else{ if(naziv_vrsta==true) cout<<l->sifra[p]<<"\t"<<l->naziv[p]<<endl; else cout<<l->sifra[p]<<"\t"<<l->vrsta[p]<<endl; } } void DeleteAll(list *l){ l->kursor = 0; } int br_unesenih_el(list *l){ return l->kursor; } void od_zadnje_sifre(list *l, int *polje, int br_unesenih_el){ for(int i=0; i<br_unesenih_el;i++) polje[i] = l->sifra[i]; bool zamjena = true; for(int i=br_unesenih_el-1; i>0 && zamjena; i--){ zamjena = false; for(int j = 0; j<i; j++) if(polje[j] > polje[j+1]){ int pom = polje[j]; polje[j] = polje[j+1]; polje[j+1] = pom; zamjena = true; } } return; } void RetriveL_datum(list *l){ int n = 0; for(int p = 0; p<(l->kursor); p++){ if(l->godina[p] > 2012){ cout<<"Sifra: "<<l->sifra[p]<<endl; cout<<"Vrsta zivotinje: "<<l->vrsta[p]<<endl; cout<<"Naziv zivotinje: "<<l->naziv[p]<<endl; cout<<"Cijena: "<<l->cijena[p]<<endl; cout<<"Datum dostave: "<<l->dan[p]<<"."<<l->mjesec[p]<<"."<<l->godina[p]<<"."<<endl; cout<<endl; n++; } if(l->godina[p] == 2012){ if(l->mjesec[p] > 9){ cout<<"Sifra: "<<l->sifra[p]<<endl; cout<<"Vrsta zivotinje: "<<l->vrsta[p]<<endl; cout<<"Naziv zivotinje: "<<l->naziv[p]<<endl; cout<<"Cijena: "<<l->cijena[p]<<endl; cout<<"Datum dostave: "<<l->dan[p]<<"."<<l->mjesec[p]<<"."<<l->godina[p]<<"."<<endl; cout<<endl; n++; } } if(l->godina[p] == 2012){ if(l->mjesec[p]==9){ if(l->dan[p]>23){ cout<<"Sifra: "<<l->sifra[p]<<endl; cout<<"Vrsta zivotinje: "<<l->vrsta[p]<<endl; cout<<"Naziv zivotinje: "<<l->naziv[p]<<endl; cout<<"Cijena: "<<l->cijena[p]<<endl; cout<<"Datum dostave: "<<l->dan[p]<<"."<<l->mjesec[p]<<"."<<l->godina[p]<<"."<<endl; cout<<endl; n++; } } } } cout<<"\nUkupan broj zivotinja dostavljenih nakon 23. 9. 2012. je: "<<n<<endl; } int brisi_naziv(list *l, bool naziv_ili_vrsta, int izlaz){ char naziv[20]; naziv_ili_vrsta = true; do{ cout<<"Naziv: "; unos(naziv); if(LocateL_naziv_vrsta(naziv, l,naziv_ili_vrsta)==EndL(l)){ cout<<"Zivotinja sa tim nazivom ne postoji!\n"; cout<<"1. Ponovna pretraga\n"; cout<<"2. Izlaz\n"; cout<<"Vas odabir: "; cin>>izlaz;} }while(LocateL_naziv_vrsta(naziv, l, naziv_ili_vrsta)==EndL(l) && izlaz!=2); if(LocateL_naziv_vrsta(naziv, l, naziv_ili_vrsta)!=EndL(l)){ //ako u do-while stsnem 2 za izlaz a ne postoji ziv izbacit ce error..i zato sam stavio jos taj if DeleteL(LocateL_naziv_vrsta(naziv, l, naziv_ili_vrsta), l); //LocateL(1. lociram poziciju trazenog elem, 2. i jos samo proslijedim glavu liste) cout<<"Obrisano!\n"; return 1; } else return 0; } int brisi_vrstu(list *l, bool naziv_ili_vrsta, int izlaz){ char vrsta[20]; naziv_ili_vrsta = false; do{ cout<<"Vrsta: "; unos(vrsta); if(LocateL_naziv_vrsta(vrsta, l, naziv_ili_vrsta)==EndL(l)){ cout<<"Zivotinja s tom vrstom ne postoji!\n"; cout<<"1. Ponovna pretraga\n"; cout<<"2. Izlaz\n"; cout<<"Vas odabir: "; cin>>izlaz; } }while(LocateL_naziv_vrsta(vrsta, l, naziv_ili_vrsta)==EndL(l) && izlaz!=2); if(LocateL_naziv_vrsta(vrsta, l, naziv_ili_vrsta)!=EndL(l)){ //ako u do-while stsnem 2 za izlaz a ne postoji trazena zivotinja izbacit ce error..i zato sam stavio jos taj if int broj = br_unesenih_el(l); do{ DeleteL(LocateL_naziv_vrsta(vrsta, l, naziv_ili_vrsta), l); //LocateL(1. lociram poziciju trazenog elem, 2. i jos samo proslijedim glavu liste) }while(LocateL_naziv_vrsta(vrsta, l, naziv_ili_vrsta)!=EndL(l)); //do-while koristim zato sto zelim proc kroz listu vise puta(ako ima vise istih vrsta) i obrisat sve elemente s tom vrstom cout<<"Obrisano!\n"; return 1; } else return 0; } void cijena_u_polje(list *l, float *polje_cijena, float *polje_sifra,char nazivi[1000][20], int br_unesenih_el){ for(int i=0; i<br_unesenih_el;i++){ polje_cijena[i] = l->cijena[i]; polje_sifra[i] = l->sifra[i]; } for(int i=0; i<br_unesenih_el;i++){ for(int j=0; j<20; j++){ nazivi[i][j] = l->naziv[i][j]; } } //sort char temp[20]; float pomocna = 0; float pomocna2 = 0; char hold[20]; int pass; int i = 0; for ( pass = 1; pass < br_unesenih_el; pass++ ){ for ( i = 0; i < br_unesenih_el - 1; i++ ){ if (strncmp(nazivi[i],nazivi[i+1],br_unesenih_el) > 0){ strcpy(hold, nazivi[i]); strcpy(nazivi[i], nazivi[i+1]); strcpy(nazivi[i+1], hold); pomocna = polje_cijena[i]; polje_cijena[i]=polje_cijena[i+1]; polje_cijena[i+1]=pomocna; pomocna2 = polje_sifra[i]; polje_sifra[i]=polje_sifra[i+1]; polje_sifra[i+1]=pomocna2; } } } } int LocateL_cijena(float x, int y, list *l){ for(int i=0; i<l->kursor;i++){ if(x==l->cijena[i] && y == l->sifra[i]) return i; } return EndL(l); }