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;
}
}
Pergunta
Ranny Santos
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
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.