Hola, Ogramar.
Gracias por tu tiempo, te dejo el código para que si lo deseas me ayudes con un segmentation fault, si pongo lo mismo dentro de main funciona todo a la perfección pero si lo hago como en este caso desde una función me da el error. -
#include <stdio.h>
#include <stdlib.h>
struct nodo{
int dato;
struct nodo *siguiente;
};
struct lista{
struct nodo *primero;
struct nodo *ultimo;
};
struct lista *ingresos( struct lista *L );
struct lista *agregar( struct lista *L, int dato );
struct nodo *crear( int dato );
void ordenar(struct lista *L);
void mostrar(struct lista *L);
int main( void ){
struct lista *Lista = NULL;
ingresos( Lista );
ordenar( Lista );
mostrar( Lista );
free(Lista);
return 0;
}
struct lista *ingresos( struct lista *L ){
int i;
for( i=0; i<7; i++ ){
printf( "\n %d", i );
L = agregar( L, i );
}
return L;
}
struct lista *agregar( struct lista *L, int dato ){
if( L != NULL ){
struct nodo *e = crear( dato );
L->ultimo->siguiente = e;
L->ultimo = e;
return L;
}else{
struct nodo *e = crear( dato );
struct lista *l = calloc( sizeof( struct lista ), 1 );
l->primero = e;
l->ultimo = e;
return l;
}
}
struct nodo *crear( int dato ){
struct nodo *e = calloc( sizeof( struct nodo), 1 );
e->dato = dato;
e->siguiente = NULL;
return e;
}
void ordenar(struct lista *L){
struct nodo *pivote = NULL,*actual = NULL;
int tmp;
if(L != NULL){
pivote = L->primero;
while(pivote != L->ultimo){
actual = pivote->siguiente;
while(actual != NULL){
if(pivote->dato > actual->dato){
tmp = pivote->dato;
pivote->dato = actual->dato;
actual->dato = tmp;
}
actual = actual->siguiente;
}
pivote = pivote->siguiente;
}
}
else{
printf("Error lista no inicializada");
}
}
void mostrar(struct lista *L){
struct nodo *auxiliar;
int i=0;
auxiliar = L->primero;
printf("\n\n Mostrando lista ordenada:\n");
while (auxiliar!=NULL) {
printf( "\n %d", auxiliar->dato);
auxiliar = auxiliar->siguiente;
i++;
}
if (i==0) printf( "\nLa lista está vacía!!\n" );
}
saludos.