Free Web Site - Free Web Space and Site Hosting - Web Hosting - Internet Store and Ecommerce Solution Provider - High Speed Internet
Search the Web

Creación de nodo, conceptos básicos

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.