1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Listas ligadas (ordenar) em (C)

Discussão em 'Programação' iniciada por Mr.Baywatch, 14 de Novembro de 2012. (Respostas: 1; Visualizações: 805)

  1. Boas, estou a ter dificuldades em ordenar a lista por numero (crescente) e estava a ver se me podiam ajudar. Por defeito, a lista está ordenada por ordem alfabética. Quero ordenar agora por numero.
    O que me parece ser é da maneira que estou a trocar. Mas já estou farto de olhar para isto e não vejo outra coisa se não isto.

    "
    lAlunos *Orderlist(lAlunos *top){

    lAlunos *aux_pt, *cur_node, *aux_previous, *previous_node;
    aux_previous = NULL;
    previous_node = top;

    for(aux_pt = top; aux_pt != NULL ;aux_pt = aux_pt->next )
    {
    for(cur_node = aux_pt->next; cur_node != NULL ;cur_node = cur_node->next)
    {
    if(aux_pt->lnum > cur_node->lnum) //TROCA!
    {
    aux_previous = cur_node;
    aux_pt->next = cur_node->next;
    cur_node->next = aux_pt->next;
    previous_node = aux_pt;
    }
    previous_node = cur_node;
    }
    aux_previous = aux_pt;
    }

    return top;
    }

    "

    Muito obrigado desde já pela atenção :)
     
    Última edição: 15 de Novembro de 2012
  2. Flinger

    Flinger Power Member

    Bem, para já um pequeno problema:

    Tu devolves sempre top. Ora este top é o apontador para o primeiro nodo da lista, antes de fazeres a ordenação. Se ao ordenares alista, este passar, por exemplo, para a segunda posição, ao devolveres o seu endereço vais perder a referência para o primeiro nodo.

    Depois, sim, tás a baralhar aí a troca.Mas isso porque precisas de mais um nível para fazer a troca. Tens de mexer nos apontadores de 3 nodos:

    [​IMG]

    E queres trocar N2 por N3:
    [​IMG]

    Tens de mexer em N1, N2 e N3.

    A maneira mais fácil é contruires nova lista, inserindo cada nodo na posição certa.
     

Partilhar esta Página