• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Llaverola

DUVIDA NUMA HASHTABLE

1 mensagem neste tópico

ola pessoal. keria a vossa ajuda, pois estou qs a acabar uma hashtable mas agora deparei-me com o seguinte problema:

eu verifico se uma palavra existe num nó. caso exista ele retorna esse nó. caso n exista ele retorna nulo.

NoPalavra *lookup(Hashtable *ht, char *str,long hcode)
{  
          NoPalavra *no = ht->htable[hcode];
          while(no!=NULL && strcmp(str, no->palavra)!=0)
          {
              no=no->prox;
          }
          return no;
}

depois disto, ele retorna o nó para a seguinte funçao:

int insert(Hashtable *hasht, char *str, int paragrafo, int posicao)
{
    unsigned long hcode = 0;
    int repete=0,i=0;
    NoPalavra *no = NULL;
    
    printf("\n\ninsert() ************* \n");
    
    for(i=0;i<strlen(str)-2;i++){
        string[i] = str[i];
    }
    string[i]='\0';
    
    hcode = hashcode(str);   
    printf("hcode = %d\n", hcode);
    
    //VERIFICAR SE O NO JA EXISTE
    no = lookup(hasht, str, hcode);  
    
    if (no!=NULL) 
    {        
            insert_occurence(no, str, paragrafo, posicao); //ELE N ENTRA NESTA FUNÇÃO
                                     
    } else {
            inserir_inicio(str, paragrafo, posicao);
            
            }
    return hcode;
}

ele esta a chamar a funçao inserir mt bem. o problema é q n esta a chamar a função insert ocurrencia caso seja diferente de nulo entendem? e n sei pq...

aqui esta a funçao inserir ocurrencia(estrutura dum no)

int insert_occurence(NoPalavra* no, char *str, int paragraph, int pos)
{
    
    printf("insert_occurence(%s)***************\n",str);
    if (no->ocorre==NULL)
    {
        no->ocorre = (Ocorrencia *)malloc(sizeof(Ocorrencia)*20);
        no->n_realoc=1;
    }
    if((no->repete)==(no->n_realoc*20-1))
    {
     //FAZER O REALLOC 
     no->n_realoc++;
     no->ocorre = (Ocorrencia*) realloc(no->ocorre, no->n_realoc*sizeof(Ocorrencia));                
    } 
    no->repete++;
    no->ocorre[no->repete].paragrafo=paragraph;
    no->ocorre[no->repete].pos=pos;
    printf("PARAGRAFO:%d\n",no->ocorre[no->repete].paragrafo);
    printf("POSICAO: %d\n",no->ocorre[no->repete].pos);
    no->repete++;
    
   
}    

aqui esta a funçao inserir_inicio o no.

void inserir_inicio(char *str, int paragrafo, int posicao)
{    
     int i=0,parag,pos;
     parag = paragrafo;
     pos = posicao;
     NoPalavra *novo=NULL;  
     printf("inserir_inicio(%s) ************* \n", str);  
     novo = (NoPalavra *)malloc(sizeof(NoPalavra));    
     strcpy(novo->palavra, str);
     novo->prox=NULL;
     printf("%s\n",novo);  
     insert_occurence(novo, str, parag, pos);
}

SEI QUE PODE SER COMPLICADO PERCEBER POR aqui ASSIM, SE N SE IMPORTAREM ADICIONEM-ME NO MSN ricardocoelho81@portugalmail.pt

E AJUDEM-ME. ESTOU MM A PRECISAR POR FAVOR.

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora