Revision: 60521
Updated Code
at November 12, 2012 03:15 by Bozidar
Updated Code
#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<<"\t"<<tekuci->naziv<<endl;
else cout<<tekuci->sifra<<"\t"<<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<<"\nUkupan 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!\n";
cout<<"1. Ponovna pretraga\n";
cout<<"2. Izlaz\n";
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!\n";
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!\n";
cout<<"1. Ponovna pretraga\n";
cout<<"2. Izlaz\n";
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!\n";
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;
}
Revision: 60520
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 11, 2012 03:27 by Bozidar
Initial Code
#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<<"\t"<<tekuci->naziv<<endl;
else cout<<tekuci->sifra<<"\t"<<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<<"\nUkupan 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!\n";
cout<<"1. Ponovna pretraga\n";
cout<<"2. Izlaz\n";
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!\n";
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!\n";
cout<<"1. Ponovna pretraga\n";
cout<<"2. Izlaz\n";
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!\n";
return 1;
}
else return 0;
}
void cijena_u_polje(list *glava, float *polje_cijena, float *polje_sifra, 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;
}
}
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;
}
Initial URL
Initial Description
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).
Initial Title
Implementacija_liste_pomocu_pokazivaca.h
Initial Tags
header
Initial Language
C++