using namespace std;

struct igra{
	char sifra[10];
	char naziv[30];
	char proizvod[20];
	char zanr[20];
	char podzanr[20];
	int PEGI;
	
};

struct lista{
	igra podaci;
	lista* sljedeci;
};

lista* InitL(lista* L){
	L = new lista;
	L.sljedeci=NULL;
	return L;
}

lista* FirstL(lista* L){
	return L;
}

lista* EndL(lista* L){
	while(L->sljedeci)
		L=L->sljedeci;
	return L;
}

lista* NextL(lista* p,lista* L){
	if(p->sljedeci == NULL) return -1;
	if(p->sljedeci != NULL) return p->sljedeci;
}

lista* PreviousL(lista* p, lista* L){
	if(p==L) return -1;
	while(L->sljedeci && L->sljedeci != p)
		L=L->sljedeci
	return L;
}

lista* LocateL(igra* x, lista* L){
	for(;L->sljedeci;L=L->sljedeci){
		if((!strcmp(x.sifra, L->sljedeci->podaci.sifra))
			&& (!strcmp(x.naziv,L->sljedeci->podaci.naziv))
			&& (!strcmp(x.proizvod,L->sljedeci->podaci.proizvod))
			&& (!strcmp(x.zanr,L->sljedeci->podaci.zanr))
			&& (!strcmp(x.podzanr,L->sljedeci->podaci.podzanr))
			&& (!strcmp(x.PEGI,L->sljedeci->podaci.PEGI)))
				return L;
		return NULL;
	}

}

void InsertL(igra* x, lista* p, lista* L){
	
	lista* dodaj = new lista;
	dodaj->podaci= x;
	dodaj->sljedeci=p->sljedeci;
	p->sljedeci=dodaj;
	
}

void DeleteL(lista* p, lista* L){
	lista* trazen;
	trazen=p->sljedeci;
	p->sljedeci=trazen->sljedeci;
	delete trazen;
}

igra* RetrieveL(lista* p, lista* L){
	return p->sljedeci->podaci;
}

void DeleteAllL(lista* L){
	lista* trazen;
	while(L->sljedeci){
		trazen=L->sljedeci;
		L->sljedeci=trazen->sljedeci;
		delete trazen;
	}
}