/* EJEMPLO DE LISTAS CIRCULARES CON DOBLE LIGA */
#include <stdio.h>
#include <stdlib.h>
struct Nodo { int Dato; struct Nodo *Sig, *Ant; };
struct Nodo *Inicio; /* Apuntador a la lista circular */
struct Nodo *CreaNodo(int Dato)
{
struct Nodo *Nuevo = (struct Nodo *)malloc(sizeof(struct Nodo));
Nuevo->Dato = Dato;
Nuevo->Sig = Nuevo->Ant = NULL;
return Nuevo;
}
void Guardar( )
{
struct Nodo *Nuevo;
int Dato = 0;
printf("Introduce el dato a guardar: "); scanf("%d", &Dato);
Nuevo = CreaNodo(Dato);
if ( !Inicio ) /* eres el primero? */
{
Inicio = Nuevo;
Inicio->Ant = Inicio->Sig = Inicio;
}
else if (Inicio->Sig == Inicio) /* Este es el segundo */
{
Inicio->Ant = Inicio->Sig = Nuevo;
Nuevo->Sig = Nuevo->Ant = Inicio;
}
else /* hay mas de dos */
{
Nuevo->Sig = Inicio->Sig;
Nuevo->Ant = Inicio;
Inicio->Sig->Ant = Nuevo;
Inicio->Sig = Nuevo;
}
}
void Muestra( )
{
int nada = 0;
struct Nodo *AUX = Inicio;
while ( AUX )
{
printf("%d\n", AUX->Dato);
scanf("%d", &nada);
AUX = AUX->Sig;
}
}
void Ejecuta(int Dato)
{
if ( !Dato ) exit(1);
if ( Dato == 1 ) Guardar(Dato);
if ( Dato == 2 ) Muestra( );
/* if ( Dato == 3 ) Borrar(Dato);
*/
}
void main()
{
int Dato = 0;
while ( 1 )
{
printf("[1] guardar dato\n[2] Muestre la lista\n[3] Borrar un dato\n[0] Salir\n");
printf("Introduce una opciOn: "); scanf("%d", &Dato);
Ejecuta(Dato);
}
}