#include "dicionario.h" #include #include #include unsigned int hash (char *pal, int s) { int r; for (r=5381; *pal != '\0'; pal++) r = (r*33 + *pal) % s; return r; } void initDic (Dicionario *d){ for(int i = 0; i < HSIZE; i++) d->listas[i]=NULL; d->npal = 0; } Palavras existePal(Palavras pals, char *pal){ Palavras res = NULL; while(pals && strcmp(pals->palavra, pal) != 0) pals = pals->prox; if(pals && strcmp(pals->palavra, pal)==0) res = pals; return res; } int acrescenta (Dicionario *d, char *pal){ Palavras palPtr; int posicao = hash(pal, HSIZE); if((palPtr = existePal(d->listas[posicao] ,pal))){ palPtr->ocorr++; } else{ d->npal++; palPtr = malloc(sizeof(Palavra)); palPtr->palavra = strdup(pal); palPtr->ocorr = 1; palPtr->prox = d->listas[posicao]; d->listas[posicao] = palPtr; } return d->npal; } void showPalavras(Palavras pals){ if(pals){ printf("%s :: %d\n", pals->palavra, pals->ocorr); showPalavras(pals->prox); } } void showDic(Dicionario d){ printf("------------------------------------------\n"); printf("%d Palavras: \n\n", d.npal); for(int i = 0; i < HSIZE ; i++ ) { if (d.listas[i]){ printf(">>>>>>>>> Lista %d:\n", i); showPalavras(d.listas[i]); } } printf("------------------------------------------\n"); } Palavras maisFreqAux (Palavras lista){ int max = 0; Palavras maiorP = NULL; while (lista) { if(lista->ocorr > max) { max = lista->ocorr; maiorP = lista; } lista = lista->prox; } return maiorP; } Palavras maisFreq(Dicionario d){ Palavras maisP=NULL, temp=NULL; for(int i = 0; iocorr < temp->ocorr)) maisP = temp; else if (temp!=NULL && maisP==NULL) maisP = temp; } return maisP; } void destroiLista (Palavras l){ Palavras destruir; while(l) { destruir = l; l = l->prox; free(destruir); } } void destroiDic (Dicionario *d){ for(int i = 0; i < HSIZE ; i++ ) { destroiLista(d->listas[i]); } initDic(d); }