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;
}
#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]