Taller # 2
Taller # 2
Taller # 2
TALLER # 2
LISTAS DOBLEMENTE ENLAZADAS:
Un tipo de lista enlazada que permite ir en ambas direcciones, hacia adelante y hacia atrás, en una lista
enlazada. Esta es la lista doblemente enlazada. Tal lista permite una gran variedad de operaciones
rápidas de actualización, incluyendo la inserción y el borrado en ambos extremos, y en el centro. Un
nodo en una lista doblemente enlazada guarda dos referencias un enlace siguiente, el cual apunta al
siguiente nodo en la lista, y un enlace prevé, el cual apunta al nodo previo en la lista.
El almacenamiento con nexos en sólo un sentido tiene el problema de no permitir recorrido hacia
atrás, pero si se agrega un segundo apuntador se puede lograr este objetivo. Pero tienen el problema
de requerir más espacio de memoria.
La ventaja que proporciona esta estructura es la operación de búsqueda e inserción, recorriendo hacia
atrás en forma inmediata.
Para simplificar la programación, es conveniente agregar nodos especiales en los extremos de lista
doblemente enlazada: un nodo header (cabeza) justo antes de la cabeza de la lista, y un nodo tráiler
(cola) justo despu.es de la cola de la lista. Estos nodos \falsos" o centinelas no guardan ningún
elemento. La cabeza tiene una referencia sig. válida pero una referencia prev nula, mientras cola tiene
una referencia prev válida pero una referencia sig nula. Una lista doblemente enlazada con estos
centinelas se muestra en la. figura siguiente.
Un objeto lista enlazada podrá simplemente necesitar guardar referencias a estos dos centinelas y un
contador tan que guarde el número de elementos,
sin contar los centinelas, en la lista.
Insertar o remover elementos en cualquier extremo de la lista doblemente enlazada se hace directo.
Además, el enlace prev elimina la necesidad de
recorrer la lista para obtener el nodo que está antes de la cola.
Otras Operaciones.
tLista crear ()
void destruir (tLista l)
tPosicion primero (tLista l)
tPosicion fin (tLista l)
void insertar (tElemento x, tPosicion p, tLista l)
void borrar (tPosicion *p, tLista l)
tElemento elemento (tPosicion p, tLista l)
tPosicion siguiente (tPosicion p, tLista l)
tPosicion anterior (tPosicion p, tLista l)
tPosicion posicion (tElemento x, tLista l)
tLista crear ()
Argumentos: Ninguno.
Efecto: (Constructor primitivo). Crea un objeto del tipo tLista.
l: Es modificada.
p: Es una posición válida para la lista l.
x: Dirección válida de un elemento del tipo T con que se instancia la lista, distinta de NULL.
Efecto: Inserta elemento x en la posición p de la lista l desplazando todos los demás elementos en una
posición.
l: Es modificada.
p: Es una posición válida para la lista l.
Efecto: Elimina el elemento de la posición p de la lista l desplazando todos los demás elementos una
posición.
l: Una lista.
p: Es una posción válida de la lista l.
l: Una lista.
p: Es una posición válida para la lista l, distinta de fin(l).
l: Una lista.
p: Es una posición válida para la lista l, distinta de primero(l).
l: Una lista.
x: Dirección válida de un elemento del tipo T con que se instancia la lista, distinta de NULL.
Efecto: Si x se encuentra entre los elementos de la lista l, devuelve la posición de su primera ocurrencia.
En otro caso, devuelve la posición fin(l).