Page 309

4 Estructuras de datos: memoria din´amica

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

return lista;

7 8 9 10 11 12 13 14

/* Lista con un nodo. */ if (lista->sig == NULL) { free(lista); lista = NULL; return lista; }

15

/* Caso general. */ for (aux =lista; aux ->sig!=NULL; aux =aux ->sig) ; atras = aux ->ant; free(aux ); atras->sig = NULL; return lista;

16 17 18 19 20 21 22

}

4.8.3.

Inserci´ on en una posici´ on determinada

Tratemos ahora el caso de la inserci´ on de un nuevo nodo en la posici´on n de una lista doblemente enlazada. ant

lista

info

sig

ant

info

3

sig

ant

info

8

0

sig

2

1

2

3

Si n est´a fuera del rango de ´ındices ((v´ alidos)), insertaremos en la cabeza (si n es negativo) o en la cola (si n es mayor que el n´ umero de elementos de la lista). A simple vista percibimos ya diferentes casos que requerir´an estrategias diferentes: La lista vac´ıa: la soluci´ on en este caso es trivial. Inserci´ on al principio de la lista: seguiremos la misma rutina dise˜ nada para insertar por cabeza y, por qu´e no, utilizaremos la funci´on que dise˜ namos en su momento. Inserci´ on al final de la lista: ´ıdem.7 Inserci´ on entre dos nodos de una lista. Vamos a desarrollar completamente el u ´ltimo caso. Nuevamente usaremos una lista concreta para deducir cada uno de los detalles del m´etodo. Insertaremos el valor 1 en la posici´on 2 de esta lista: lista

ant

info

sig

ant

info

3

sig

ant

info

8

sig

2

1. Empezamos localizando el elemento que ocupa actualmente la posici´on n. Un simple bucle efectuar´ a esta labor: aux lista

ant

info

sig

ant

3

info

sig

ant

8

info

sig

2

2. Pedimos memoria para un nuevo nodo, lo apuntamos con el puntero nuevo y le asignamos el valor: aux lista

ant

info

sig

ant

3

sig

ant

8

nuevo 7 Ver

info

info

sig

2

ant

info

sig

1

m´ as adelante el ejercicio 285.

Introducci´ on a la Programaci´ on con C

303

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement