Return to Snippet

Revision: 60521
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
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++