Page 267

4 Estructuras de datos: memoria din´amica

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

La declaraci´ on de la l´ınea 3 es curiosa. Cuando declaras dos o m´as punteros en una sola l´ınea, has de poner el asterisco delante del identificador de cada puntero. En una l´ınea de declaraci´on que empieza por la palabra int puedes declarar punteros a enteros y enteros, seg´ un precedas los respectivos identificadores con asterisco o no. Deteng´amonos un momento para considerar el estado de la memoria justo despu´es de ejecutarse la l´ınea 6, que reza ((aux = lista)): aux info

lista

sig

8

El efecto de la l´ınea 6 es que tanto aux como lista apuntan al mismo registro. La asignaci´ on de un puntero a otro hace que ambos apunten al mismo elemento. Recuerda que un puntero no es m´as que una direcci´ on de memoria y que copiar un puntero a otro hace que ambos contengan la misma direcci´ on de memoria, es decir, que ambos apunten al mismo lugar. Sigamos con nuestra traza. Veamos c´omo queda la memoria justo despu´es de ejecutar la l´ınea 7, que dice ((lista = malloc(sizeof (struct Nodo)))): aux info

lista

sig

info

sig

8

La l´ınea 8, que dice ((lista->info = 3)), asigna al campo info del nuevo nodo (apuntado por lista) el valor 3: aux info

lista

sig

info

3

sig

8

La lista a´ un no est´ a completa, pero observa que no hemos perdido la referencia al u ´ltimo fragmento de la lista. El puntero aux la mantiene. Nos queda por ejecutar la l´ınea 9, que efect´ ua la asignaci´ on ((lista->sig = aux )) y enlaza as´ı el campo sig del primer nodo con el segundo nodo, el apuntado por aux . Tras ejecutarla tenemos: aux info

lista

sig

info

sig

8

3

¡Perfecto! ¿Seguro? ¿Y qu´e hace aux apuntando a´ un a la lista? La verdad, nos da igual. Lo importante es que los nodos que hay enlazados desde lista formen la lista que quer´ıamos construir. No importa c´ omo quedan los punteros auxiliares: una vez han desempe˜ nado su funci´on en la construcci´ on de la lista, son sup´erfluos. Si te quedas m´as tranquilo, puedes a˜ nadir una l´ınea con aux = NULL al final del programa para que aux no quede apuntando a un nodo de la lista, pero, repetimos, es innecesario.

4.5.3.

Adici´ on de un nodo (por cola)

Marqu´emonos un nuevo objetivo. Intentemos a˜ nadir un nuevo nodo al final de la lista. Es decir, partiendo de la u ´ltima lista, intentemos obtener esta otra: lista

info

3

sig

info

8

sig

info

sig

2

¿Qu´e hemos de hacer? Para empezar, pedir un nuevo nodo, s´olo que esta vez no estar´a apuntado por lista, sino por el que hasta ahora era el u ´ltimo nodo de la lista. De momento, lo mantendremos apuntado por un puntero auxiliar. Despu´es, accederemos de alg´ un modo al campo sig del u ´ltimo nodo de la lista (el que tiene valor 8) y haremos que apunte al nuevo nodo. Finalmente, haremos que el nuevo nodo contenga el valor 2 y que tenga como siguiente nodo a NULL. Intent´emoslo: Introducci´ on a la Programaci´ on con C

261

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement