[ anon81718 @ 15.06.2006. 17:46 ] @
pozdrav! da skratim,zadatak je ovaj: na slici je prikazana dvostruko spregnuta cirkularna lista, implementirati listu sa funkcijama (uz ostale pomocne funkcije koje su potrebne): e) unos novog cvora na zeljenu poziciju (ako je prazna lista pozicija je 1) f) brisanje cvora sa zeljene pozicije g) funkciju za kretanje u desno po listi h) pronalazak trazenog cvora link za sliku: http://www.slibe.com/image/631d68db-lista_bmp/ ja sam nesto napravio ne znam da li je to to...isto je lista al ne znam da li je ova spregnuta cirkularna: Code: #include<iostream.h> #include<string.h> struct cvor { char Ime[20]; char Prezime[20]; int br_Index; cvor *sljedeci; }; //dekleracija funkcija void dodaj(struct cvor *novi); void dodaj_poz(struct cvor *novi, int pozicija); void brisicvor(struct cvor *brisi); void brisilistu(struct cvor *pok); void brisi_poz(int poz); void printcvor(struct cvor *pok); void printlist(struct cvor *pok); struct cvor *traziime(struct cvor *pok, char *ime); struct cvor *inicvor(char *ime, char *prezime, int inx); int br_elemenata(); // implementacija globalnih pokazivaca cvor *glava = NULL; cvor *rep = NULL; //implementacija funkcija void brisi_poz(int pozicija) { struct cvor *tmp; struct cvor *pok; pok = glava; int brojac = 0; while(pok != NULL) { brojac++; pok = pok->sljedeci; } pok = glava; if(pozicija == 0 || pozicija > brojac) { cout <<"Pogresno unijeta pozicija."<<endl; return; } else { if(brojac == 1) { glava = NULL; rep = NULL; cout <<"Lista je izbrisana"<<endl; return; } if (pozicija == 1) { glava = glava->sljedeci; return; } if(pozicija == brojac) { for(int i = 0; i < pozicija-2 ;i++) { pok = pok->sljedeci; } tmp = pok->sljedeci; rep = pok; delete tmp; return; } pok = glava; for(int i = 0; i < pozicija - 2;i++) { pok = pok->sljedeci; } tmp = pok->sljedeci; pok->sljedeci = pok->sljedeci->sljedeci; delete tmp; } } struct cvor *inicvor(char *ime, char *prezime, int inx) { struct cvor *pokcvor; pokcvor = new cvor; if(pokcvor==NULL) return NULL; else { strcpy(pokcvor->Ime, ime); strcpy(pokcvor->Prezime, prezime); pokcvor->br_Index = inx; return pokcvor; } } int br_elemenata() { struct cvor *broj; broj = glava; int brojac = 0; while(broj != NULL) { brojac = brojac + 1; broj = broj->sljedeci; } return brojac; } void dodaj_poz(struct cvor *novi, int pozicija) { int broj, brojac = 1; broj = br_elemenata(); if(pozicija == 1) { dodaj(novi); return; } if(pozicija == broj+1) { rep->sljedeci = novi; novi->sljedeci = NULL; rep = novi; return; } struct cvor *pozicioni; pozicioni = glava; while(brojac != pozicija - 1) { brojac++; pozicioni = pozicioni->sljedeci; } novi->sljedeci = pozicioni->sljedeci; pozicioni->sljedeci = novi; } void dodaj(struct cvor *novi) { if(glava == NULL) { glava = novi; rep = novi; glava->sljedeci = NULL; } else { novi->sljedeci = glava; glava = novi; } } void brisicvor(struct cvor *brisi) { struct cvor *tmp, *prije; tmp = brisi; prije = glava; if(tmp == prije) { glava = glava->sljedeci; if(rep == tmp) rep = rep->sljedeci; delete tmp; } else { while(prije->sljedeci != tmp) { prije = prije->sljedeci; } prije->sljedeci = tmp->sljedeci; if(rep == tmp) { rep = prije; } delete tmp; } } void brisilistu(struct cvor *pok) { struct cvor *tmp; if(glava == NULL) return; if(pok == glava) { glava = NULL; rep = NULL; } else { tmp = glava; while(tmp->sljedeci != pok) tmp = tmp->sljedeci; rep = tmp; while(pok != NULL) { tmp = pok->sljedeci; delete pok; pok = tmp; } } } void printcvor(struct cvor *pok) { cout<<"\n\t\tBroj indexa: \t"<<pok->br_Index <<"\n\t\tIme: \t\t"<<pok->Ime <<"\n\t\tPrezime: \t"<<pok->Prezime<<endl; } void printlist(struct cvor *pok) { while(pok != NULL) { printcvor(pok); pok = pok->sljedeci; } } struct cvor *traziime(struct cvor *pok, char *ime) { while(strcmp(ime, pok->Ime)!= 0) { pok = pok->sljedeci; if(pok == NULL) break; } return pok; } //glavni program int main() { char im[20]; char pr[20]; struct cvor *pok; int brx,ch=1; while(ch != 0) { cout <<"\n\t\t\tMENI:\n" <<"\n\t1.Dodaj element\n" <<"\n\t2.Brisi element\n" <<"\n\t3.Izlistaj sve\n" <<"\n\t4.Dodaj element u poziciju\n" <<"\n\t5.Brisi element sa pozicije\n" <<"\n\t0.IZLAZ\n\n\tUnesi opciju(0-5)-->"; cin>>ch; switch(ch) { case 1: cout <<"\n\t\tUnesi ime:\t";cin>>im; cout <<"\n\t\tUnesi prezime:\t";cin>>pr; cout <<"\n\t\tBroj indexa:\t";cin>>brx; pok = inicvor(im,pr,brx); dodaj(pok); break; case 2: if(glava!=NULL) { cout <<"\n\t\tUnesi ime za brisanje elementa liste:";cin>>im; pok = traziime(glava, im); if(pok == NULL) { cout <<"Ime nije pronadjeno!"<<endl; } else brisicvor(pok); } else cout <<"Lista je prazna"; break; case 3: cout <<"\nIzlistavanje liste:\n"; printlist(glava); break; case 4: int brojac, pozicija; brojac = br_elemenata(); cout <<"Unesite poziciju za unos elementa(1 - "<<brojac + 1<<"): "; cin >>pozicija; if(pozicija > brojac+1 || pozicija < 1) { cout <<"Greska, nemoguce za unijeti!"; break; } else { cout <<"\n\t\tUnesi ime:\t";cin>>im; cout <<"\n\t\tUnesi prezime:\t";cin>>pr; cout <<"\n\t\tBroj indexa:\t";cin>>brx; pok = inicvor(im,pr,brx); dodaj_poz(pok, pozicija); } break; case 5: brojac = br_elemenata(); if (brojac == 0) cout <<"Lista nije kreirana"<<endl; else { cout <<"\nUnesite poziciju koju zelite izbrisati(1 - "<<brojac<<"): "; cin >>pozicija; brisi_poz(pozicija); } } } return 0; } ZNAM DA JE SOURCE DIG..AL TO MI JE SEMINARSKI... UNAPRIJED HVALA!!! [Ovu poruku je menjao X Files dana 15.06.2006. u 19:00 GMT+1] |