/*--------------------------------------------------------------------------------------------
	2_lancolt_lista.c

*/

#include <stdio.h>

struct vetel{
	int arukod;		/*ez a kulcsmezo*/
	int eladottdb;
	struct vetel *kovetkezo;
	struct vetel *elozo;
};

struct vetel *kezdo; 		/*strazsaelemek*/
struct vetel *aktualis;
struct vetel *uj;
struct vetel *veg;

struct vetel * keres(int);
void beszur(struct vetel *v);
void listaz();
void torol(int kod);

int main()
{
	clrscr();
	kezdo=(struct vetel *) malloc(sizeof(struct vetel));
	veg=(struct vetel *) malloc(sizeof(struct vetel));
	kezdo->kovetkezo=veg;
	veg->elozo=kezdo;

	uj = (struct vetel *) malloc(sizeof(struct vetel));
	uj -> arukod=2;
	uj->eladottdb=1;
	beszur(uj);

	uj = (struct vetel *) malloc(sizeof(struct vetel));
	uj -> arukod=1;
	uj->eladottdb=1;
	beszur(uj);

	uj = (struct vetel *) malloc(sizeof(struct vetel));
	uj -> arukod=1;
	uj->eladottdb=1;
	beszur(uj);


	listaz();
	printf("\ntorles utan\n");
	torol(1);
	listaz();
	return 0;

}

/*--------------------------------------------------------------------------------------------
*/

void beszur(struct vetel *v)
{
	struct vetel *seged;
	if (seged=keres(v->arukod)){
		seged->eladottdb+=v->eladottdb;
	}
	else{
		aktualis=kezdo->kovetkezo;
		while ((aktualis!=veg) && (aktualis->arukod < v->arukod)){
			aktualis=aktualis->kovetkezo;
		}
		/*az aktualis ele kell most lancolni*/
		seged = aktualis->elozo;
		v->kovetkezo=aktualis;
		v->elozo=seged;
		seged->kovetkezo=v;
		aktualis->elozo=v;
	}
	return;
}

/*--------------------------------------------------------------------------------------------
*/

void listaz()
{
	aktualis=kezdo->kovetkezo;
	while(aktualis!=veg){
		printf("A kovetkezo eladas:\n\nARUKOD %d\n", aktualis->arukod);
		printf("osszes eladott mennyiseg : %d\n\n", aktualis->eladottdb);
		aktualis=aktualis->kovetkezo;
	}
	return;
}

/*--------------------------------------------------------------------------------------------
*/

struct vetel * keres(int kod) /*arukod alapjan keres*/
{ /*arukod alapjan keres*/
	aktualis=kezdo->kovetkezo;
	while (aktualis!=veg)	{
		if (aktualis->arukod==kod) return aktualis;
		else aktualis=aktualis->kovetkezo;
	}
	return NULL;
}

/*--------------------------------------------------------------------------------------------
*/

void torol(int kod)
{
	struct vetel *elotte, *utana;
	if (aktualis=keres(kod)){
		elotte = aktualis->elozo;
		utana = aktualis->kovetkezo;
		elotte->kovetkezo=utana;
		utana->elozo=elotte;
		free(aktualis);
	}
	return;
}
