#include "dicionario.h" #include #include #include void initDic (Dicionario *d){ d->arvorePalavras = NULL; d->npal = 0; } Palavras existePal(Palavras pals, char *pal){ if(pals == NULL || strcmp(pal, pals->palavra) == 0) return pals; else{ if(strcmp(pal, pals->palavra) < 0) return existePal(pals->esq, pal); else return existePal(pals->dir, pal); } } Palavras insPalavra(Palavras pals, char* pal){ Palavras palPtr; if(pals == NULL){ palPtr = malloc(sizeof(Palavra)); palPtr->palavra = strdup(pal); palPtr->ocorr = 1; palPtr->esq = NULL; palPtr->dir = NULL; return palPtr; } else { if(strcmp(pal, pals->palavra) < 0) pals->esq = insPalavra(pals->esq, pal); else pals->dir = insPalavra(pals->dir, pal); return pals; } } int acrescenta (Dicionario *d, char *pal){ Palavras palPtr; if((palPtr = existePal(d->arvorePalavras, pal))){ palPtr->ocorr++; } else{ d->npal++; d->arvorePalavras = insPalavra(d->arvorePalavras, pal); } return d->npal; } void showPalavras(Palavras pals){ if(pals != NULL){ showPalavras(pals->esq); printf("%s :: %d\n", pals->palavra, pals->ocorr); showPalavras(pals->dir); } } void showDic(Dicionario d){ printf("------------------------------------------\n"); printf("%d Palavras: \n\n", d.npal); showPalavras(d.arvorePalavras); printf("------------------------------------------\n"); } Palavras maisFreqAux(Palavras pals, Palavras p){ if(pals == NULL) return p; else{ if(p == NULL || pals->ocorr > p->ocorr) p = pals; p = maisFreqAux(pals->esq, p); p = maisFreqAux(pals->dir, p); return p; } } Palavras maisFreq (Dicionario d){ return maisFreqAux(d.arvorePalavras, NULL); } void destroiArvore(Palavras pals){ if(pals != NULL){ destroiArvore (pals->esq); destroiArvore (pals->dir); free(pals); } } void destroiDic (Dicionario *d){ destroiArvore(d->arvorePalavras); initDic(d); } void showListaPalavras(ListaPalavras l){ if(l){ printf("%s :: %d\n", l->palavra, l->ocorr); showListaPalavras(l->prox); } } ListaPalavras insOrdLista(ListaPalavras lista, Palavras p){ ListaPalavras novo; if(lista == NULL || p->ocorr > lista->ocorr){ novo = malloc(sizeof(NodoListaPalavras)); novo->palavra = strdup(p->palavra); novo->ocorr = p->ocorr; novo->prox = lista; return novo; } else{ lista->prox = insOrdLista(lista->prox, p); return lista; } } ListaPalavras constroiListaOcorrAux(Palavras pals, ListaPalavras listaOcorr){ if(pals != NULL){ listaOcorr = constroiListaOcorrAux (pals->esq, listaOcorr); listaOcorr = insOrdLista(listaOcorr, pals); listaOcorr = constroiListaOcorrAux (pals->dir, listaOcorr); } return listaOcorr; } ListaPalavras constroiListaOcorr(Palavras pals){ return constroiListaOcorrAux(pals, NULL); }