podataka Pokazivaci结构
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了podataka Pokazivaci结构相关的知识,希望对你有一定的参考价值。
Header koji sadrži sve funkcije koje se mogu izvesti nad listom implementirane pomocu pokazivaca. U headeru se jos nalazi i Merge sort algoritam.
#include<iostream> using namespace std; struct zivotinja{ int sifra; char vrsta[35]; char naziv[35]; float cijena; int datum[3]; }; struct Lista_zapis{ zivotinja vrijednost; Lista_zapis *sljedeci; }; typedef Lista_zapis *element; typedef Lista_zapis lista; element EndL(lista *L){ return 0; } element FirstL(lista *L){ if(L->sljedeci==NULL) return EndL(L); else return L->sljedeci; } lista *InitL(lista *L){ L=new lista; L->sljedeci=NULL; return L; } element PreviousL(element p, lista *L){ if(p==FirstL(L)) return 0; if(p==EndL(L)){ while(L->sljedeci) L=L->sljedeci; } else{ while(p!=L->sljedeci) L=L->sljedeci; } return L; } zivotinja RetreiveL(element p, lista *L){ return p->vrijednost; } int InsertL(zivotinja x, lista *p, lista *L){ lista *novi; if(p>L->sljedeci || p<0) return 0; if(p==EndL(L)){ while(L->sljedeci) L=L->sljedeci; novi=new lista; L->sljedeci=novi; novi->sljedeci=NULL; novi->vrijednost=x; return 1; } else{ p=PreviousL(p,L); novi=new lista; novi->sljedeci=L->sljedeci; p->sljedeci=novi; novi->vrijednost=x; return 1; } } element NextL(element p, lista *L){ if(p->sljedeci==NULL) return EndL(L); if(p==EndL(L)) return 0; else{ return p->sljedeci; } } int DeleteL(element p, lista *L){ element prethodni, tekuci; tekuci=p; if(tekuci==EndL(L))return 0; 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; } element LocateL(zivotinja x, lista *L){ element pozicija=EndL(L); pozicija=PreviousL(pozicija,L); if(strlen(x.naziv)>0){ if(EndL(L)!=FirstL(L)){ while(5){ zivotinja trenutni=RetreiveL(pozicija,L); if(strcmp(x.naziv,trenutni.naziv)==0) return pozicija; if(pozicija==FirstL(L))break; pozicija=PreviousL(pozicija,L); } }} if(strlen(x.vrsta)>0){ if(EndL(L)!=FirstL(L)){ while(5){ zivotinja trenutni=RetreiveL(pozicija,L); if(strcmp(x.vrsta,trenutni.vrsta)==0) return pozicija; if(pozicija==FirstL(L))break; pozicija=PreviousL(pozicija,L); } }} return EndL(L); } element DeleteAll(lista *L){ element trenutni,prijasnji; prijasnji=L; trenutni=L->sljedeci; while(trenutni){ delete prijasnji; prijasnji=trenutni; trenutni=trenutni->sljedeci; } delete prijasnji; L=NULL; return NULL; } void Merge(zivotinja polje[],int i, int k, int j){ int beg=i, sec=k+1, br=0, vel=j-i+1; zivotinja *pomocno=new zivotinja[j-i+1]; while(beg<=k && sec<=j){ if(polje[beg].cijena>polje[sec].cijena) pomocno[br++]=polje[beg++]; else if(polje[beg].cijena<polje[sec].cijena) pomocno[br++]=polje[sec++]; if(polje[beg].cijena==polje[sec].cijena){ if(strcmp(polje[beg].naziv,polje[sec].naziv)==1) pomocno[br++]=polje[beg++]; else pomocno[br++]=polje[sec++]; } } while(beg<=k) pomocno[br++]=polje[beg++]; while(sec<=j) pomocno[br++]=polje[sec++]; for(int I=0;I<vel;I++) polje[i+I]=pomocno[I]; delete []pomocno; } void Rec(zivotinja polje[],int i, int j){ int middle; if(i<j){ middle=(i+j)/2; Rec(polje,i,middle); Rec(polje,middle+1,j); Merge(polje,i,middle,j); } } void copy(zivotinja polje[],int velicina){ element sortirana=InitL(sortirana); element novi,zadnji; zadnji=sortirana; for(int i=0; i<velicina;i++){ while(zadnji->sljedeci) zadnji=zadnji->sljedeci; novi=new lista; zadnji->sljedeci=novi; novi->sljedeci=NULL; novi->vrijednost.sifra=polje[i].sifra; strcpy(novi->vrijednost.naziv,polje[i].naziv); novi->vrijednost.datum[0]=polje[i].datum[0]; novi->vrijednost.datum[1]=polje[i].datum[1]; novi->vrijednost.datum[2]=polje[i].datum[2]; strcpy(novi->vrijednost.vrsta,polje[i].vrsta); novi->vrijednost.cijena=polje[i].cijena; cout<<"Sifra "<<novi->vrijednost.sifra<<endl; cout<<"Naziv "<<novi->vrijednost.naziv<<endl; cout<<"Cijena "<<novi->vrijednost.cijena<<endl; cout<<"Vrsta "<<novi->vrijednost.vrsta<<endl; cout<<"Datum "<<novi->vrijednost.datum[0]<<"."<<novi->vrijednost.datum[1]<<"."<<novi->vrijednost.datum[2]<<"."<<endl; cout<<endl; } } void MSort(lista *L,element i, element j){ if(FirstL(L)!=EndL(L)){ int velicina=0,br=0; element zadnji; zadnji=L; while(zadnji->sljedeci){ zadnji=zadnji->sljedeci; velicina++; } zivotinja *pomocno=new zivotinja[velicina]; element lokacija=L->sljedeci; while(lokacija){ pomocno[br++]=RetreiveL(lokacija,L); lokacija=lokacija->sljedeci; } Rec(pomocno,0,velicina-1); copy(pomocno,velicina); } else cout<<"Lista ne postoji ili je prazna "<<endl; }
以上是关于podataka Pokazivaci结构的主要内容,如果未能解决你的问题,请参考以下文章
结构podataka-Zadataku 1-Glavniu计划
结构podataka/Evensicijaživotinja/Main