Ir ao conteúdo
  • Cadastre-se

Ordenaçao de uma lista


Kimio Fujii

Posts recomendados

Olá a todos, me chamo Kimio e sou novo aqui no fórum.

Estou fazendo um trabalho de estrutura de dados e estou passando por um problema...

Preciso ordenar uma lista mas nao to conseguindo de jeito algum, estou uns 2 dias quebrando a cabeça e senti que precisava de uma mao do pessoal mais experiente.

segue o codigo: 

 

struct No{
        char letra;
        int freq;
        struct No *esq, *dir;
};
 
typedef struct No No;   
 
struct no_vet{
   No *nodo;
   struct no_vet *proximo;
};
 
typedef struct no_vet no_vet;
 
 
Funçao de ordenaçao
 
void ordenar_floresta(no_vet **forest){
    no_vet *atual, *menor;
    int comp = (*forest)->nodo->freq;
    if(*forest != NULL){
        atual = *forest;
        while(atual != NULL){
            if(atual->nodo->freq < comp){
                comp = atual->nodo->freq;
                menor = atual;
                atual = *forest;
                *forest = menor;
            }
            atual = atual->proximo;
        }
    }
    if((*forest)->proximo != NULL) ordenar_floresta(&(*forest)->proximo);
}
 
 
Dou como entrada uma string, ele insere na lista normalmente, tanto a frequencia quanto a letra. Por exemplo 
string = {"aaaaaaaaaafgggjjjkkl"}
 
Na funcao de imprimir os valores dentro da lista (floresta) ele me mostra:
letra : a         letra:f        letra: g      ...     letra : l
freq : 10        freq: 1      freq: 3       ....    freq: 1
 
Mas depois de passar pela funcao de ordenacao ele mostra apenas:
 
letra: f     letra: l  
freq: 1     freq: 1
 
E nada mais... Nao sei mais o que pode ser esse problema .-. Por favor me ajudem !
Link para o comentário
Compartilhar em outros sites

Tente assim:

 

void ordenar_floresta(no_vet **forest){    no_vet *menor;    if( (*forest)->proximo != NULL )        ordenar_floresta( &(*forest)->proximo );    while( *forest != NULL && (*forest)->proximo != NULL )    {        if( (*forest)->nodo->freq > (*forest)->proximo->nodo->freq )        {            menor = *forest;            *forest = menor->proximo;            menor->proximo = (*forest)->proximo;            (*forest)->proximo = menor;        }        forest = &(*forest)->proximo;    }}
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...