Ir ao conteúdo
  • Cadastre-se

C Ordenação lista encadeada com nó


Kurini

Posts recomendados

Como o titulo sugere eu quero ordenar uma lista encadeada simples com nó descritor, as outras operações de manipulação funcionam ,e pra ordenação eu tentei adaptar o funcionamento de um bubble sort de uma lista sequencial, mas sem sucesso.

 

struct elemento {
    int elemento;
    struct elemento * proximo;
};

struct lista {
    struct elemento * inicio;
    int tamanho;
};


void lista_ordena(Lista *p){

    int i=0, j=0, troca;

    struct elemento *aux, * tmp1, * tmp2;

    for(i=p->tamanho;i>1;i--){

    troca=0;
    for    (j=1;j<i;j++){
    tmp1=lista_obtem_elemento(p,j); // funcao recebe a lista e posicao e retorna o elemento que esta na posicão
    tmp2=lista_obtem_elemento(p,j+1);
        if(tmp1<tmp2){
        ++troca;
        aux=tmp1;
        tmp1=tmp2;
        tmp2=aux;
        }
    }
    if(troca==0) break;
    }

}

 

 

 

Link para o comentário
Compartilhar em outros sites

Tudo bem @Kurini , contudo você entendeu onde errou ou está "voando" com relação a isso também? Digo isso porque seu raciocínio está certo (pra mim), entretanto estou interessado no valor que se encontra dentro do nó e não na ligação que existe entre nós ou próprio nó, neste caso devemos trocar o que guarda o nó e preservar sua ligação.

 

Todo nó guarda alguma coisa!

 

Link para o comentário
Compartilhar em outros sites

 

Tudo bem @Kurini , contudo você entendeu onde errou ou está "voando" com relação a isso também? Digo isso porque seu raciocínio está certo (pra mim), entretanto estou interessado no valor que se encontra dentro do nó e não na ligação que existe entre nós ou próprio nó, neste caso devemos trocar o que guarda o nó e preservar sua ligação.

 

Todo nó guarda alguma coisa!

 

Então @AnsiC ,eu sei a parte que está errada, antes estava manipulando o que estava dentro do no como algo do tipo, 

 

aux=lista_copia(elemento_obtem(e1));
elemento_altera(e1,elemento_obtem(e2));
elemento_altera(e2,aux);

mas eu estava querendo eliminar a função de altera o elemento pra ordenar tudo na mesma função.

Link para o comentário
Compartilhar em outros sites

Bom dia!

 

1)

Opere os elementos da lista diretamente. O engano é querer realizar troca DOS ponteiros nós e não NOS ponteiros: quero trocar o dado interno (dentro do) ponteiro nó. Ou seja, cada nó  (elemento), leva um dado  (elemento) e um ponteiro para o próximo nó, estamos interessados em comparar o elemento (dado) e realizar a troca entre eles ignorando o ponteiro próximo, que também está dentro do nó, mas não se deve modificar.

 

2)

Pelo que entendi, lista_copia, elemento_altera ... são funções que tratam da lista. E nada pode ser fazer com relação a isso a não ser removê-las. É um pouco confuso recomendar sua remoção, pois implementa-las foi uma decisão sua.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...