Tabla de Contenidos
Tabla de Contenidos
Tabla de Contenidos
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
1.3. LISTAS DOBLEMENTE LIGADAS 15<br />
Figura 1.10: Listas con centinelas<br />
List.Insert(x)<br />
x.next := head<br />
if head ≠ nil<br />
then head.prev := x<br />
head := x<br />
x.prev := nil<br />
El tiempo <strong>de</strong> ejecución <strong>de</strong> Insert es O(1) en el pero caso.<br />
El siguiente procedimiento elimina un elemento x <strong>de</strong>s<strong>de</strong> una lista. En el se supone que x es un<br />
puntero directo al objeto que se quiere eliminar. Si en vez <strong>de</strong>l puntero, sólo se tiene la clave <strong>de</strong>l<br />
objeto, este <strong>de</strong>be ser primero encontrado en la lista y luego eliminado.<br />
List.Delete(x)<br />
if x.prev ≠ nil<br />
then x.prev.next := x.next<br />
else head := x.next<br />
if x.next ≠ nil<br />
then x.next.prev := x.prev<br />
El tiempo <strong>de</strong> ejecución <strong>de</strong> Delete es O(1) en el peor caso.<br />
Centinelas<br />
Si en el código <strong>de</strong> Delete pudiésemos ignorar las condiciones <strong>de</strong> bor<strong>de</strong>, la implementación<br />
resultaría en algo como<br />
List.Delete(x)<br />
x.prev.next := x.next<br />
x.next.prev := x.prev<br />
que no funcionaría por ejemplo en el caso <strong>de</strong> que la lista se encontrara vacía.<br />
Un centinela es un objeto tonto que nos sirve para simplificar las condiciones <strong>de</strong> bor<strong>de</strong> en una<br />
lista (en general en una estructura ligada por punteros). Supongamos que a nuestra lista le agregamos<br />
un objeto nil que representa a nil pero tiene todos los atributos <strong>de</strong> los otros objetos <strong>de</strong> la lista. La