Ir ao conteúdo

Posts recomendados

Postado

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
Postado

@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
Postado

@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 :)

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!