/ Published in: C++
Ovo je moja lista polja koju sam koristio u svom glavnom programu koja je implementirana kao lista pomoću polja
Expand |
Embed | Plain Text
Copy this code and paste it in your HTML
#include<iostream> using namespace std; typedef int clan; struct zivine{ int sifra; char vrsta[40]; char naziv[40]; float cijena; int dat[3]; }; struct Zapis_L{ zivine vrj[1000]; int k; }; typedef struct Zapis_L lis; clan EndL(lis *L){ return (L->k); } clan FirstL(lis *L){ if(L->k==0) return EndL(L); else return 0; } zivine RetreiveL(clan p, lis *L){ return L->vrj[p]; } clan InsertL(zivine x,clan p,lis *L){ if(p>L->k || p<0) return 0; else{ for( int q=L->k;q>=p;q--) L->vrj[q+1]=L->vrj[q]; L->k++; L->vrj[p]=x; return 1; } } lis *InitL(lis *L){ L=new lis; L->k=0; return L; } clan NextL(clan p, lis *L){ if(p==EndL(L)-1) return EndL(L); if(p==EndL(L)) return 0; else return p+1; } clan PreviousL(clan p, lis *L){ if(p==FirstL(L)) return -1; if(p==EndL(L)) return p-1; return p-1; } clan DeleteL(clan p, lis *L){ if((L->k==0)) return 0; if((p>=L->k)||(p<0)) return 0; if(p==EndL(L)) return 0; if(p==FirstL(L)){ L->k--; for( int i=p; i<L->k; i++) L->vrj[i]=L->vrj[i+1]; return 1; } else{ L->k--; for( int i=p; i<L->k; i++) L->vrj[i]=L->vrj[i+1]; } return 1; } clan DeleteAll(lis *L){ return L->k==0; } clan LocateL(zivine x, lis *L){ clan pozicija=EndL(L); pozicija=PreviousL(pozicija,L); if(strlen(x.naziv)>0){ if(FirstL(L)!=EndL(L)){ while(5){ zivine tekuci=RetreiveL(pozicija,L); if(strcmp(x.naziv,tekuci.naziv)==0) return pozicija; if(pozicija==FirstL(L))break; pozicija=PreviousL(pozicija,L); } } } if(strlen(x.vrsta)>0){ if(FirstL(L)!=EndL(L)){ while(5){ zivine tekuci=RetreiveL(pozicija,L); if(strcmp(x.vrsta,tekuci.vrsta)==0) return pozicija; if(pozicija==FirstL(L))break; pozicija=PreviousL(pozicija,L); } } } return EndL(L); } void Merge(lis *L,int i,int k,int j){ int start=i, zad=k+1, br=0, vel=j-i+1; zivine *pom = new zivine [j-i+1]; while (start<=k && zad<=j){ if(L->vrj[start].cijena>L->vrj[zad].cijena) pom[br++]=L->vrj[start++]; else if(L->vrj[start].cijena<L->vrj[zad].cijena) pom[br++]=L->vrj[zad++]; if(L->vrj[start].cijena==L->vrj[zad].cijena){ if(strcmp(L->vrj[start].naziv,L->vrj[zad].naziv)==1) pom[br++]=L->vrj[start++]; else pom[br++]=L->vrj[zad++]; } } while(start<=k) pom[br++]=L->vrj[start++]; while(zad<=j) pom[br++]=L->vrj[zad++]; for(int I=0;I<vel;I++) L->vrj[i+I]=pom[I]; delete []pom; } void Sort(lis *L, int i,int j){ int sred; if(i<j){ sred=(i+j)/2; Sort(L,i,sred); Sort(L,sred+1,j); Merge(L,i,sred,j); } } void Merge(lis *L,int i,int j){ if(FirstL(L)==EndL(L)){ cout<<"Prazna lista! "<<endl; return; } Sort(L,0,EndL(L)-1); zivine tekuci; for(int i=0;i<=EndL(L)-1;i++){ tekuci=L->vrj[i]; cout<<"Sifra: "<<tekuci.sifra<<endl; cout<<"Naziv: "<<tekuci.naziv<<endl; cout<<"Datum: "<<tekuci.dat[0]<<"."<<tekuci.dat[1]<<"."<<tekuci.dat[2]<<endl; cout<<"Vrsta: "<<tekuci.vrsta<<endl; cout<<"Cijena: "<<tekuci.cijena<<endl; cout<<endl; } }