1
The code works until the part I have ordered a list already created using a new list, only I can not identify the error. That’s when I created the functions Ordain and Addordenado that started to go wrong.
OBS:I asked to print the new list on itself Ordain to be able to test, then I would move on to the main, only that not even this is working.
#include <stdio.h>
#include <stdlib.h>
typedef struct Elemento{
int valor;
struct Elemento*prox;
}Elemento;
typedef struct Lista{
Elemento*Inicio;
Elemento*Fim;
}Lista;
Lista*CriandoLista(){
Lista*lista=(Lista*)malloc(sizeof(Lista));
lista->Inicio=NULL;
lista->Fim=NULL;
return lista;
}
Elemento*CriandoElemento(int n){
Elemento*novo=(Elemento*)malloc(sizeof(Elemento));
novo->prox=NULL;
novo->valor=n;
return novo;
}
void AddLista(Lista*lista,Elemento*novo){
if(lista->Inicio==NULL){
lista->Inicio=novo;
lista->Fim=lista->Inicio;
}else{
lista->Fim->prox=novo;
lista->Fim=novo;
}
}
void Imprimir(Lista*lista){
Elemento*aux=lista->Inicio;
while(aux!=NULL){
printf(" %d ",aux->valor);
aux=aux->prox;
}
}
void AddOrdenado(Lista*lista,Lista*nvlista){
Lista*aux=lista;
Lista*aux2=nvlista;
if(nvlista->Inicio==NULL){
nvlista->Inicio=lista->Inicio;
nvlista->Fim=lista->Inicio;
lista->Inicio=lista->Inicio->prox;
nvlista->Inicio->prox=NULL;
}else{
if((nvlista->Inicio->valor)<(lista->Inicio->valor)){
nvlista->Inicio=lista->Inicio;
lista->Inicio=lista->Inicio->prox;
nvlista->Inicio->prox=aux2->Inicio;
}else if((nvlista->Fim->valor)>(lista->Inicio->valor)){
aux2->Fim->prox=lista->Inicio;
nvlista->Fim=aux2->Fim;
lista->Inicio=lista->Inicio->prox;
nvlista->Fim->prox=NULL;
}else{
while(aux2!=NULL){
if((lista->Inicio->valor)>(aux2->Inicio->prox->valor)){
lista->Inicio->prox=aux2->Inicio->prox;
aux2->Inicio->prox=lista->Inicio;
lista->Inicio=aux->Inicio->prox;
}
aux2->Inicio=aux2->Inicio->prox;
}
}
}
}
void Ordenar(Lista*lista){
Lista*nvlista=CriandoLista();
while(lista->Inicio!=NULL){
AddOrdenado(lista,nvlista);
}
Imprimir(nvlista);
}
int main(){
Lista*lista=CriandoLista();
int n[]={5,10,9};
for(int i=0;i!=sizeof(n)/sizeof(int);i++){
AddLista(lista,CriandoElemento(n[i]));
}
Imprimir(lista);
Ordenar(lista);
}