/*--------------------------------------------------------------------------------------------
	2_hasheles.c

*/

#include <stdio.h>
#define HASHMERET 10

struct vetel{
	int arukod;			/*ez a kulcsmezo*/
	int eladottdb;
	struct vetel *kovetkezo;
	struct vetel *elozo;
};

struct vetel * katalogus[HASHMERET];	/*vodorkatalogus*/
struct vetel *aktualis;

/*--------------------------------------------------------------------------------------------
*/

void init()
{		/*inicializalas*/
	int i;
	for(i=0;i<HASHMERET;i++)
		katalogus[i]=NULL;
}

/*--------------------------------------------------------------------------------------------
*/

int h(int kod)
{
	return (kod % HASHMERET);

}

/*--------------------------------------------------------------------------------------------
*/

struct vetel *keres(int kod)
	{
	struct vetel * temp;
	int i = h(kod);
	temp = katalogus[i];
	while ((temp!=NULL) && (temp->arukod!=kod)){
		temp=temp->kovetkezo;
	}
	return(temp);
}

/*--------------------------------------------------------------------------------------------
*/

void beszur(struct vetel *v)
	{
	int i = h(v->arukod);
       	if (aktualis=keres(v->arukod)){
		aktualis->eladottdb += v->eladottdb;
               /* return;*/
	}
	else{
             aktualis=katalogus[i];
	     katalogus[i]=v;
	     v->elozo=NULL;
	     v->kovetkezo=aktualis;
	     if (aktualis) aktualis->elozo=v;

        }
}

/*--------------------------------------------------------------------------------------------
*/

torol();

/*--------------------------------------------------------------------------------------------
*/

modosit();

/*--------------------------------------------------------------------------------------------
*/

void kiir(int sorszam)
	{
	aktualis=katalogus[sorszam];
	while(aktualis){
		printf("KOD : %d , MENNYISEG : %d \n",aktualis->arukod,aktualis->eladottdb );
		aktualis=aktualis->kovetkezo;
	}
}

/*--------------------------------------------------------------------------------------------
*/

main()
{
	int i;
        struct vetel *uj;
        clrscr();
	init();
        kiir(0);


       uj=(struct vetel *) malloc(sizeof(struct vetel));
       uj->arukod=0;
       uj->eladottdb=1;
       beszur(uj);


       aktualis=(struct vetel *) malloc(sizeof(struct vetel));
       aktualis->arukod=10;
       aktualis->eladottdb=13;
       beszur(aktualis);

       uj=(struct vetel *) malloc(sizeof(struct vetel));
       uj->arukod=0;
       uj->eladottdb=3;
       beszur(uj);

       uj=(struct vetel *) malloc(sizeof(struct vetel));
       uj->arukod=7;
       uj->eladottdb=1;
       beszur(uj);

       uj=(struct vetel *) malloc(sizeof(struct vetel));
       uj->arukod=17;
       uj->eladottdb=5;
       beszur(uj);


       for (i=0;i<HASHMERET;i++)
	{
		printf("\naz %d lista elemei:\n",i);
		kiir(i);
	}
	return 0;
}
