实施
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实施相关的知识,希望对你有一定的参考价值。
Datoteka zaglavlja u kojoj se nalazi moja implementacija liste pomoću pokazivaÄa.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), brunesenihel(L), brisinaziv(L), brisivrstu(L) i cijenaupolje(L).
#include <iostream> struct lista{ int sifra, dan, mjesec, godina; float cijena; char vrsta[20], naziv[20]; lista *sljedeci; }; typedef struct lista *element; typedef struct lista list; void InitL(list *glava){ glava->sljedeci = NULL; } element FirstL(list *glava){ list *sljedeci; sljedeci = glava->sljedeci; return sljedeci; } element EndL(list *glava){ list *zadnji; zadnji = glava; while(zadnji->sljedeci) zadnji = zadnji->sljedeci; return zadnji; } element NextL(element p, list *glava){ if (p->sljedeci == NULL) { printf("Element ne postoji!"); return 0; } else { list *sljedbenik; sljedbenik=p->sljedeci; return sljedbenik; } } element PreviousL(element p, list *glava){ list *prethodni; prethodni=glava; while ((prethodni->sljedeci != NULL) && (prethodni->sljedeci != p)) prethodni=prethodni->sljedeci; if (prethodni->sljedeci != NULL) return prethodni; else { printf("Element ne postoji!"); return 0; } } element LocateL(int x, list *glava){ list *tekuci = glava; while (tekuci != NULL && tekuci->sifra != x) tekuci=tekuci->sljedeci; if(tekuci==NULL) return NULL; else return tekuci; } element LocateL_naziv_vrsta(char unos[20], list *glava, bool naziv_ili_vrsta){ //trazim prema nazivu i vrti kako bi mogao pronedeno obrisat list *tekuci = glava; if(naziv_ili_vrsta==true){ while (tekuci != NULL && strcmp(tekuci->naziv,unos)) tekuci=tekuci->sljedeci; } else{ while (tekuci != NULL && strcmp(tekuci->vrsta,unos)) tekuci=tekuci->sljedeci; } if(tekuci==NULL){ return NULL;} else return tekuci; } void InsertL(int dan, int mjesec, int godina, int sifra, char vrsta[20],char naziv[20],float cijena, element pozicija, list *glava){ list *prethodni = glava; while(prethodni->sljedeci!=NULL){ if(pozicija==prethodni->sljedeci) break; prethodni = prethodni->sljedeci; } if(prethodni->sljedeci==NULL){ list *sljedeci = prethodni->sljedeci; list *novi = new list; novi->sljedeci = sljedeci; prethodni->sljedeci = novi; novi->sifra = sifra; strcpy(novi->vrsta,vrsta); strcpy(novi->naziv,naziv); novi->cijena = cijena; novi->dan = dan; novi->mjesec = mjesec; novi->godina = godina; } else{ list *sljedeci = prethodni->sljedeci; list *novi = new list; novi->sljedeci = sljedeci; prethodni->sljedeci = novi; novi->sifra = sifra; strcpy(novi->vrsta,vrsta); strcpy(novi->naziv,naziv); novi->cijena = cijena; novi->dan = dan; novi->mjesec = mjesec; novi->godina = godina; } } void DeleteL(element p, list *glava){ element l; p=PreviousL(p,glava); if (p->sljedeci != NULL) { l=p->sljedeci; p->sljedeci=p->sljedeci->sljedeci; delete l; } } void RetriveL(element p, list *glava){ list *tekuci = glava; while(tekuci->sljedeci!=NULL){ tekuci = tekuci->sljedeci; if(tekuci == p) break; } cout<<"Sifra: "<<tekuci->sifra<<endl; cout<<"Vrsta zivotinje: "<<tekuci->vrsta<<endl; cout<<"Naziv zivotinje: "<<tekuci->naziv<<endl; cout<<"Cijena: "<<tekuci->cijena<<endl; cout<<"Datum dostave: "<<tekuci->dan<<"."<<tekuci->mjesec<<"."<<tekuci->godina<<"."<<endl; cout<<endl; } void RetriveL_Naziv(element p, list *glava, bool naziv_vrsta){ list *tekuci = glava; while(tekuci->sljedeci!=NULL){ tekuci = tekuci->sljedeci; if(tekuci == p) break; } if(naziv_vrsta==true) cout<<tekuci->sifra<<" "<<tekuci->naziv<<endl; else cout<<tekuci->sifra<<" "<<tekuci->vrsta<<endl; } void DeleteAll(list *glava){ element l; while(glava->sljedeci){ l = glava->sljedeci; glava->sljedeci = glava->sljedeci->sljedeci; delete l; } } int br_unesenih_el(list *glava){ list *tekuci = glava; int n = 0; while(tekuci->sljedeci!=NULL){ n++; tekuci = tekuci->sljedeci; } return n; } void od_zadnje_sifre(list *glava, int *polje, int br_unesenih_el){ list *tekuci = glava->sljedeci; for(int i=0;i < br_unesenih_el; i++) polje[i] = 0; int i = 0; while(tekuci!=NULL){ if(tekuci->sifra > 0){ polje[i] = tekuci->sifra; i++; } tekuci = tekuci ->sljedeci; } 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 *glava){ list *tekuci = glava; int n = 0; while(tekuci!=NULL){ if(tekuci->godina > 2012){ cout<<"Sifra: "<<tekuci->sifra<<endl; cout<<"Vrsta zivotinje: "<<tekuci->vrsta<<endl; cout<<"Naziv zivotinje: "<<tekuci->naziv<<endl; cout<<"Cijena: "<<tekuci->cijena<<endl; cout<<"Datum dostave: "<<tekuci->dan<<"."<<tekuci->mjesec<<"."<<tekuci->godina<<"."<<endl; cout<<endl; n++; } if(tekuci->godina == 2012){ if(tekuci->mjesec > 9){ cout<<"Sifra: "<<tekuci->sifra<<endl; cout<<"Vrsta zivotinje: "<<tekuci->vrsta<<endl; cout<<"Naziv zivotinje: "<<tekuci->naziv<<endl; cout<<"Cijena: "<<tekuci->cijena<<endl; cout<<"Datum dostave: "<<tekuci->dan<<"."<<tekuci->mjesec<<"."<<tekuci->godina<<"."<<endl; cout<<endl; n++; } } if(tekuci->godina == 2012){ if(tekuci->mjesec==9){ if(tekuci->dan>23){ cout<<"Sifra: "<<tekuci->sifra<<endl; cout<<"Vrsta zivotinje: "<<tekuci->vrsta<<endl; cout<<"Naziv zivotinje: "<<tekuci->naziv<<endl; cout<<"Cijena: "<<tekuci->cijena<<endl; cout<<"Datum dostave: "<<tekuci->dan<<"."<<tekuci->mjesec<<"."<<tekuci->godina<<"."<<endl; cout<<endl; n++; }}} tekuci = tekuci->sljedeci; } cout<<" Ukupan broj zivotinja dostavljenih nakon 23. 9. 2012. je: "<<n<<endl; } int brisi_naziv(list *glava, bool naziv_ili_vrsta, int izlaz){ char naziv[20]; naziv_ili_vrsta = true; do{ cout<<"Naziv: "; unos(naziv); if(LocateL_naziv_vrsta(naziv, glava,naziv_ili_vrsta)==0){ cout<<"Zivotinja sa tim nazivom ne postoji! "; cout<<"1. Ponovna pretraga "; cout<<"2. Izlaz "; cout<<"Vas odabir: "; cin>>izlaz;} }while(LocateL_naziv_vrsta(naziv, glava, naziv_ili_vrsta)==0 && izlaz!=2); if(LocateL_naziv_vrsta(naziv, glava, naziv_ili_vrsta)!=0){ //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, glava, naziv_ili_vrsta), glava); //LocateL(1. lociram poziciju trazenog elem, 2. i jos samo proslijedim glavu liste) cout<<"Obrisano! "; return 1; } else return 0; } int brisi_vrstu(list *glava, bool naziv_ili_vrsta, int izlaz){ char vrsta[20]; naziv_ili_vrsta = false; do{ cout<<"Vrsta: "; unos(vrsta); if(LocateL_naziv_vrsta(vrsta, glava, naziv_ili_vrsta)==0){ cout<<"Zivotinja s tom vrstom ne postoji! "; cout<<"1. Ponovna pretraga "; cout<<"2. Izlaz "; cout<<"Vas odabir: "; cin>>izlaz; } }while(LocateL_naziv_vrsta(vrsta, glava, naziv_ili_vrsta)==0 && izlaz!=2); if(LocateL_naziv_vrsta(vrsta, glava, naziv_ili_vrsta)!=0){ //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(glava); do{ DeleteL(LocateL_naziv_vrsta(vrsta, glava, naziv_ili_vrsta), glava); //LocateL(1. lociram poziciju trazenog elem, 2. i jos samo proslijedim glavu liste) }while(LocateL_naziv_vrsta(vrsta, glava, naziv_ili_vrsta)!=0); //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! "; return 1; } else return 0; } void cijena_u_polje(list *glava, float *polje_cijena, float *polje_sifra,char nazivi[1000][20], int br_unesenih_el){ list *tekuci = glava->sljedeci; list *tekuci2 = glava->sljedeci; for(int i = 0; i<br_unesenih_el; i++){ polje_cijena[i] = 0; polje_sifra[i] = 0; } int i = 0; while(tekuci!=NULL){ if(tekuci->cijena > 0){ polje_cijena[i] = tekuci->cijena; polje_sifra[i] = tekuci->sifra; i++; } tekuci = tekuci ->sljedeci; } for(int i=0; i<br_unesenih_el;i++){ for(int j=0; j<(strlen(tekuci2->naziv)); j++){ nazivi[i][j] = tekuci2->naziv[j]; } tekuci2 = tekuci2->sljedeci; } //sort char temp[20]; float pomocna = 0; float pomocna2 = 0; char hold[20]; int pass; 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; } } } } element LocateL_cijena(float x, float y, list *glava){ list *tekuci = glava; while (tekuci != NULL){ if(tekuci->cijena == x && tekuci->sifra ==y) return tekuci; tekuci=tekuci->sljedeci;} if(tekuci==NULL) return NULL; else return tekuci; }
以上是关于实施的主要内容,如果未能解决你的问题,请参考以下文章