Pagini recente » Cod sursa (job #2857138) | Cod sursa (job #1009454) | Cod sursa (job #2321452) | Cod sursa (job #2367258) | Cod sursa (job #2591097)
#include "thash.h"
TH *initTH(size_t M,TFHash fh)
{
TH *h = (TH*)calloc(sizeof(TH),1);
if(!h)
{
printf("eroare alocare\n");
return NULL;
}
h->M = M;
h->fh = fh;
h->v = (TLista*)calloc(M,sizeof(TLista));
if(!h->v)
{
free(h);
return NULL;
}
return h;
}
void distrTH(TH **ah)
{
TLista *p,el,aux;
int i;
for(p = (*ah)->v ; p < (*ah)->v + (*ah)->M; p++)
{
for(el = *p; el != NULL;)
{
aux = el;
el = el->urm;
free(aux);
}
}
free((*ah)->v);
free(*ah);
*ah = NULL;
}
void afiTH(TH *ah)
{
TLista p,el;
for(int i = 0; i < ah->M; i++)
{
p = ah->v[i];
if(p)
{
printf("LISTA %d\n",i);
for(el = p; el != NULL; el = el->urm)
printf("%d ",el->info);
printf("\n");
}
}
}
int existaTH(TH *a,int nr,TFCmp f)
{
int i;
int cod = a->fh(nr);
TLista el;
for(el = a->v[cod]; el != NULL; el = el->urm)
{
if(f(el->info,nr) == 0)
return 1;
}
return 0;
}
int insTH(TH *a,int nr,TFCmp f)
{
int cod = a->fh(nr);
TLista el;
for(el = a->v[cod]; el != NULL; el = el->urm)
if(!f(el->info,nr))
return 0;
int rez = insLista(a->v + cod,nr);
return rez;
}
int extrTH(TH *a,int nr,TFCmp f)
{
int cod = a->fh(nr);
TLista p,prev;
for(prev = NULL, p = a->v[cod]; p != NULL; prev = p, p = p->urm)
{
if(!f(p->info,nr))
{
TLista aux = p;
if(prev)
prev->urm = p->urm;
else
p = p->urm;
free(aux);
return 1;
}
}
return 0;
}