|
|||||||
|
|
|
|||||
|
|
|||||||
Creación de la estructura
typedef struct ListaNodo
{
TipoL info;
struct ListaNodo *sig;
} *pListaNodo;
Esta estructura recursiva, nos permite almacenar un elemento denominado info de
tipo (genérico) TipoL.
TipoL puede ser cualquier tipo de dato simple (int,double) , o también una estructura o
puntero. Lo importante es que el manejo de los nodos, sean independientes del tipo de
dato que se almacene.
El segundo campo, es un puntero a una estructura del mismo tipo.
Ejemplo
Supongamos que necesitamos guardar números enteros.
Para ello, antes de la declaración de la estructura, se debe poner :
typedef int TipoL;
Estamos diciendo, que TipoL va a ser de tipo int.
Se reserva memoria para el nodo aux, donde los valores de los campos son 5 y NULL.
pListaNodo aux = (pListaNodo) malloc(sizeof(struct ListaNodo)); TipoL elem = 5; aux->info = elem; aux->sig = NULL;
Supongamos que queremos que el campo aux->sig apunte a un nodo que contenga el elemento 8. Para eso, creamos un nevo nodo y actualizamos el campo aux->sig.
pListaNodo otro = (pListaNodo) malloc(sizeof(struct ListaNodo)); elem = 8; otro->info = elem; otro->sig = NULL; aux->sig = otro;
Ahora, para complicar un poco el asunto, vamos a insertar un nuevo nodo llamado medio, que almacene el número 6. Obviamente el nodo va a insertar ordenadamente.
pListaNodo medio = (pListaNodo) malloc(sizeof(struct ListaNodo)); elem = 6; medio->info = elem;
Después del proceso de insertar se supone que la lista debe quedar :
5 -> 6 -> 8.
Supongamos que sólo podemos acceder a través del nodo aux.
/* equivalente a : medio->sig = otro */ medio->sig = aux->sgte; aux->sig = medio;
Si quisieramos acceder al campo info del nodo "otro", a través del nodo "aux", una forma de hacerlo es así :
TipoL a = aux->sig->sig->info;
Supongamos que queremos eliminar el nodo "medio" accediendo a través del nodo aux. Para eso, seguimos los siguientes pasos :
/* guardar el nodo otro */ pListaNodo temp = aux->sig->sig; free(aux->sig); aux->sig = temp;
Si proyectamos el uso de N nodos, tenemos que usar un mecanismo mas eficiente para administrar estas estructuras. De este concepto nacen las LISTAS.