// DADA UNA LISTA DE NUMEROS, SE ORDENAN USANDO UNA LISTA
// DOBLEMENTE LIGADA
#include <stdio.h>
#include <stdlib.h>
struct nodo
{
int num;
struct nodo *sig, *ant;
};
struct nodo *start;
int datos[]= {73, 5, 5, 8, 80, 92, 56, 1, 7};
void guardar(int num)
{
struct nodo *new = (struct nodo*)malloc(sizeof(struct nodo));
struct nodo *aux = start;
new->sig = new->ant = NULL;
new->num = num;
// COLOCARLO
if ( start )
{
while( num > aux->num )
{
if ( aux->sig ) aux = aux->sig;
else break;
}
if ( aux->sig == NULL ) { // ES EL ULTIMO
new->ant = aux;
aux->sig = new;
}
else
if (aux->ant == NULL ) // ES EL PRIMERO
{
new->sig = start;
start->ant = new;
start = new;
}
else
{
new->sig = aux;
aux->ant->sig = new;
new->ant = aux->ant;
aux->ant = new;
}
}
else
start = new;
}
void inicio()
{
int k=0;
int n = sizeof(datos) / sizeof(int);
for (k=0; k<n; k++)
guardar(datos[k]);
}
void mostrar()
{
struct nodo *aux = start;
while (aux)
{
printf("%d\n", aux->num);
aux = aux->sig;
}
}
main() { start = NULL; inicio(); mostrar(); }