Ir ao conteúdo
  • Cadastre-se

C Ordem Crescente em uma lista encadeada em c


Igor Vargas

Posts recomendados

Estou com uma dúvida onde preciso mostrar a lista em ordem crescente.A funcão esta retornando nulo.

 

ista *ordemCrescente(lista *p){ 
  lista *aux = NULL; 
  lista *novo = p;
int *recebe;
int x=0;
int menor=0;
while(novo != NULL){
    if(novo->dado < menor){
        aux = novo->prox;
         novo = novo->dado;
         novo->dado = aux; 
    return p;               
    }       

    novo= novo->prox;
}

}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

@giu_d claro.

 


#include <stdio.h>
 #include <stdlib.h>

typedef struct LISTA{

int dado;
struct LISTA *prox; 




}lista;

lista *insere(lista *p, int valor){

lista *novo;
novo=(lista*)malloc(sizeof(lista));
novo->dado = valor;
novo->prox = p;
return novo;

 }


void imprime(lista *p){
lista *novo;
for(novo = p; novo!= NULL; novo=novo->prox){
    printf("%d",novo->dado);

}


 }
 lista *ordemCrescente(lista *p){
lista *aux = NULL;
lista *novo = p;


int *recebe;
int x=0;
int menor=0;
while(novo != NULL){
    if(novo->dado < menor){
        aux = novo->prox;
         novo = novo->dado;
         novo->dado = aux; 
    return p;               
    }       

    novo= novo->prox;
}

     }






     main(){

  lista *l,i;
  lista *primeiro, *ultimo;
l = NULL;
l = insere(l, 20);
l = insere(l, 30);
l = insere(l, 40);
l = insere(l, 50);
l = insere(l, 60);


imprime(l);
printf("\n");
l = ordemCrescente(l);
imprime(teste);
  }

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Igor Vargas Olá. Vê se é isso:

lista *ordemCrescente(lista *p) {

    lista *aux = p;
    lista *t;
    int c;

    if (p == NULL || p->prox == NULL)
        return NULL;

    while (aux != NULL) {
        t = aux->prox;
        while (t != NULL) {
            if (aux->dado > t->dado) {
                c = aux->dado;
                aux->dado = t->dado;
                t->dado = c;
            }
            t = t->prox;
        }
        aux = aux->prox;
    }

    return p;
}

Recomendo esse material:

ListaEncadeada - Cap10.pdf

 

Outro ponto q notei em seu código. Você está inserindo os elementos no início da lista. Dessa forma, ao imprimir esses elementos, os mesmos não serão impressos de acordo com a ordem de inserção.

Se interessar mudar isso, o ideal seria inserir os elementos no final da lista, logo, sua função insere poderia ficar assim:

lista *insere(lista *p, int valor) {

    lista *novo;
    novo = malloc(sizeof(lista));
    novo->dado = valor;
    lista *ant = NULL;
    lista *l = p;

    while (l != NULL) {
        ant = l;
        l = l->prox;
    }

    if (ant == NULL) { // insere no início
        novo->prox = p;
        p = novo;
    } else { // insere no meio
        novo->prox = ant->prox;
        ant->prox = novo;
    }
    return p;
}

Obs: É apenas uma dica. Dê uma olhada no tutorial q te passei e vai ver de maneira bem detalhada a respeito disso :)

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!