Ir ao conteúdo
  • Cadastre-se
Kurini

C Ordenação lista encadeada com nó

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;
    }

}

 

 

 

Compartilhar este post


Link para o post
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!

 

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Kurini Não sei se isso vai ajudar ou atrapalhar, mais eu fiz um código esses dias mais ou menos parecido com isso ai.

deixei o código para download, me desculpe pela confusão no meu código e pelos comentários ;P  

ponteiros.zip

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!