Ir para conteúdo
Fórum Script Brasil
  • 0

Ordenar - Lista duplamente encadeada


Ranny Santos

Pergunta

Bom dia, galera estou tentando ordenar os elementos de uma lista duplamente encadeada, porem sempre da erro, poderiam me dizer oque esta errado e como corrigir a função, função estará em destaque. Segue o código:

 

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

typedef struct no * link;
struct no{
 int conteudo;
 link next;
 link prev;
};

link criarLista();
int listaVazia(link l);
void imprimeLista(link l);
link buscaElemento(link l, int val);
void liberaLista(link l);
link inserirElementos(link l, int val);
link maiorNo(link l);
link ordenar(link l);


int main(){
    link inicio = criarLista();

    int i, valor;

    //Inserir valores e imprimir
    for(i = 0; i < 5; i++){
        printf("\nDigite um valor para a lista: ");
        scanf("%d", &valor);
        inicio = inserirElementos(inicio, valor);
    }
    printf("Lista inicial: \n");
    imprimeLista(inicio);

    //Buscar maior elemento
    link aux = maiorNo(inicio);
    printf("\nO maior elemento da lista e: %d\n", aux->conteudo);

    //Ordenar lista
    inicio = ordenar(inicio);
    printf("\nLista ordenada: \n");
    imprimeLista(inicio);

return 0;
}


link criarLista(){
    return NULL;
}

int listaVazia(link l){
    return (l == NULL);
}

void imprimeLista(link l){
    link p = l;
    if(listaVazia(l)){
        printf("Lista vazia!\n");
    }
    else{
        while(p != NULL){
            printf("%d\t", p->conteudo);
            p = p->next;
        }
    }
}

link buscaElemento(link l, int val){
    link p = l;
    if(listaVazia(l)){
        printf("Lista Vazia!\n");
    }
    else{
        while(p != NULL){
            if(p->conteudo == val){
                return p;
            }
            p = p->next;
        }
    }
    return NULL;
}

void liberaLista(link l){
    link p = l;
    while (p != NULL){
        link t = p->next;
        free(p);
        p = t;
    }
    free(l);
}

link inserirElementos(link l, int val){
    link novo = (link)malloc(sizeof(struct no));
    novo->conteudo = val;
    novo->next = l;
    novo-> prev = NULL;

    if(l != NULL)
        l->prev = novo;
    return novo;

}


//Interativa
link maiorNo(link l){
    link p = l;
    link maior = (link)malloc(sizeof(struct no));
    maior->conteudo = l->conteudo;
    for(p = l; p != NULL; p = p->next){
        if(maior->conteudo < p->conteudo){
            maior = p;
        }
    }

    return maior;
}

link ordenar(link l){
    link p;
    link q;

    for(p = l; p != NULL; p = p->next){
        for(q = l; q != NULL; q->next){
            if(p->conteudo < q->conteudo){
                p->conteudo = q->conteudo;
            }
        }
    }

    return p;
}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...