Beruflich Dokumente
Kultur Dokumente
SEMANA 3
ÍNDICE
LISTAS DOBLEMENTE ENLAZADAS ...................................................................................................... 3
OBJETIVOS ESPECÍFICOS ...................................................................................................................... 3
INTRODUCCIÓN ................................................................................................................................... 3
1. CONCEPTO DE LISTA DOBLEMENTE ENLAZADA .......................................................................... 3
2. OPERACIONES CON LISTAS DOBLEMENTE ENLAZADAS .............................................................. 5
2.1. INSERTAR ................................................................................................................................. 5
2.2. BORRAR ................................................................................................................................... 5
2.3. RECORRER ............................................................................................................................... 6
2.4. BÚSQUEDA .............................................................................................................................. 6
3. UTILIZACIÓN DE LISTAS DOBLEMENTE ENLAZADAS ................................................................... 7
3.1. EJEMPLO DEL OPERADOR INSERTAR ....................................................................................... 7
3.2. EJEMPLO DEL OPERADOR BORRAR ......................................................................................... 8
4. APLICACIONES CON LISTAS DOBLEMENTE ENLAZADAS.............................................................. 9
COMENTARIO FINAL.......................................................................................................................... 15
REFERENCIAS ..................................................................................................................................... 16
2
ESTE DOCUMENTO CONTIENE LA SEMANA 3
LISTAS DOBLEMENTE ENLAZADAS
OBJETIVOS ESPECÍFICOS
Se espera que, al finalizar esta semana, el estudiante sea capaz de:
INTRODUCCIÓN
La lista enlazada tiene la característica que solamente puede ser recorrida en un sentido,
empezando el recorrido por el nodo inicial y visitando cada nodo a través de los punteros hasta
llegar al nodo final; sin embargo, hay situaciones en la que se requiere recorrer la lista en ambos
sentidos, ya sea del inicio al fin o del fin al inicio.
Por lo anterior, surge la necesidad de contar con una nueva estructura de datos: La lista
doblemente enlazada, que va a tener la característica de poder ser recorrida en ambos sentidos.
datos dinámica cuya característica es que cada nodo consta de tres partes: la información
2012, p. 263).
3
ESTE DOCUMENTO CONTIENE LA SEMANA 3
Una lista doblemente ligada es una colección de nodos, en la cual uno de ellos tiene dos
apuntadores, uno apuntando a su predecesor y otro a su sucesor. Por medio de estos punteros se
podrá entonces avanzar o retroceder a través de la lista, según se tomen las direcciones de uno u
otro apuntador (Cairó, 2006).
“Como una lista doble es una estructura dinámica, no es necesario establecer su tamaño, ya que
crece su demanda de memoria conforme se agregan elementos y se libera cuando son eliminados”
(López, 2012, p. 263).
Una lista doble puede representarse utilizando apuntadores o referencias que definen la
secuencia de nodos que contiene. Sin embargo, se requiere identificar el primer nodo de la
lista, lo cual se logra mediante un apuntador al nodo inicial y el último nodo, mediante un
apuntador al nodo final, mientras cada nodo tiene un apuntador tanto a su antecesor
como a su sucesor (excepto el primero que no tiene antecesor y el último que no tiene
sucesor). Lo anterior permite recorrer la lista doble en ambos sentidos” (López, 2012, p.
263).
4
ESTE DOCUMENTO CONTIENE LA SEMANA 3
2. OPERACIONES CON LISTAS DOBLEMENTE ENLAZADAS
Las operaciones que se pueden llevar a cabo en este tipo de estructura son las mismas que en las
listas enlazadas. Se estudiarán las operaciones de insertar, borrar, recorrer y búsqueda.
2.1. INSERTAR
La operación insertar agrega un nodo a la lista doblemente enlazada, debido a que la lista
doblemente enlazada es dinámica , cuando se inserta un nuevo nodo se tiene que crear el espacio
de memoria para almacenarlo y acomodarlo mediante los punteros correspondientes (López,
2012).
2.2. BORRAR
La operación borrar elimina un nodo de la lista doblemente enlazada, como la lista doblemente
enlazada es dinámica, cuando se elimina un nodo se libera espacio de memoria y se ajustan los
punteros correspondientes para mantener la secuencia lógica. Antes de efectuar la operación,
tiene que validarse que la lista doblemente enlazada no este vacía, lo cual se logra verificando si el
nodo inicial o el nodo final apuntan a nulo (López, 2012).
5
ESTE DOCUMENTO CONTIENE LA SEMANA 3
2.3. RECORRER
Esta operación corresponde a seguir el encadenamiento lógico implementado por los punteros, ya
que el acomodo lógico de los nodos no necesariamente coincide con el ordenamiento físico. En
una lista doblemente enlazada el recorrido puede realizarse en ambas direcciones, ya sea
empezando por el nodo inicial y visitando sucesivamente el nodo indicado por el puntero siguiente
o empezando por el nodo final y consultando sucesivamente el nodo indicado por el puntero
anterior (López, 2012).
Al tener cada nodo una doble liga, la lista se puede recorrer tanto del inicio
del final al principio con las ligas izquierdas. Cualquiera sea la dirección del
2.4. BÚSQUEDA
Esta operación consiste en recorrer la estructura para localizar un nodo en particular en la lista
doblemente enlazada y consultar su información. El recorrido puede hacerse en ambas
direcciones, pero debido al ordenamiento lógico de los nodos no siempre es necesario recorrerla
completa para localizar el nodo deseado (López, 2012).
6
ESTE DOCUMENTO CONTIENE LA SEMANA 3
3. UTILIZACIÓN DE LISTAS DOBLEMENTE ENLAZADAS
7
ESTE DOCUMENTO CONTIENE LA SEMANA 3
3.2. EJEMPLO DEL OPERADOR BORRAR
A continuación se puede observar cómo borrar el nodo 29 de la siguiente lista doblemente
enlazada.
Para eliminar el nodo 29 se debe modificar el puntero siguiente del nodo anterior (18) para que
apunte al nodo siguiente del nodo que se eliminó (46) y el puntero anterior del nodo siguiente (46)
para que apunte al nodo anterior del nodo que se eliminó (18).
8
ESTE DOCUMENTO CONTIENE LA SEMANA 3
4. APLICACIONES CON LISTAS DOBLEMENTE ENLAZADAS
Un ferrocarril puede ser considerado un caso de la vida cotidiana que representa una lista
doblemente enlazada, ya que cada vagón tiene un enganche en cada extremo (simulando el
puntero anterior y el puntero siguiente), de tal forma que enlaza el vagón anterior y otro posterior
(excepto el primero que no tiene vagón anterior y el último que no tiene vagón sucesor). (López,
2012).
Dos de las aplicaciones más conocidas de las listas son la representación de polinomios y
resolución de colisiones (hash). En general se puede señalar que las listas doblemente enlazadas
son muy útiles para aquellas aplicaciones en que se necesite el dinamismo en el crecimiento y
reducción de la estructura de datos usada para el almacenamiento de la información (Cairó, 2006).
9
ESTE DOCUMENTO CONTIENE LA SEMANA 3
Implementación del método insertar en el Lenguaje de Programación C
10
ESTE DOCUMENTO CONTIENE LA SEMANA 3
Implementación del método borrar en el Lenguaje de Programación C
/* Borrar el nodo */
/* Si lista apunta al nodo que queremos borrar, apuntar a otro */
if(nodo == *lista)
if(nodo->anterior) *lista = nodo->anterior;
else *lista = nodo->siguiente;
11
ESTE DOCUMENTO CONTIENE LA SEMANA 3
Implementación de listas doblemente enlazadas en lenguaje de programación C
#include <stdlib.h>
#include <stdio.h>
#define ASCENDENTE 1
#define DESCENDENTE 0
int main()
{
Lista lista = NULL;
pNodo p;
MostrarLista(lista, ASCENDENTE);
MostrarLista(lista, DESCENDENTE);
MostrarLista(lista, ASCENDENTE);
MostrarLista(lista, DESCENDENTE);
BorrarLista(&lista);
system("PAUSE");
return 0;
}
12
ESTE DOCUMENTO CONTIENE LA SEMANA 3
/* Crear un nodo nuevo */
nuevo = (pNodo)malloc(sizeof(tipoNodo));
nuevo->valor = v;
/* Borrar el nodo */
/* Si lista apunta al nodo que queremos borrar, apuntar a otro */
if(nodo == *lista)
if(nodo->anterior) *lista = nodo->anterior;
else *lista = nodo->siguiente;
13
ESTE DOCUMENTO CONTIENE LA SEMANA 3
if(nodo->siguiente) /* no es el último nodo */
nodo->siguiente->anterior = nodo->anterior;
free(nodo);
}
actual = *lista;
while(actual->anterior) actual = actual->anterior;
while(actual) {
nodo = actual;
actual = actual->siguiente;
free(nodo);
}
*lista = NULL;
}
nodo = lista;
if(orden == ASCENDENTE) {
while(nodo->anterior) nodo = nodo->anterior;
printf("Orden ascendente: ");
while(nodo) {
printf("%d -> ", nodo->valor);
nodo = nodo->siguiente;
}
}
else {
while(nodo->siguiente) nodo = nodo->siguiente;
printf("Orden descendente: ");
while(nodo) {
printf("%d -> ", nodo->valor);
nodo = nodo->anterior;
}
}
printf("\n");
}
14
ESTE DOCUMENTO CONTIENE LA SEMANA 3
COMENTARIO FINAL
Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces, uno al
nodo siguiente, y otro al nodo anterior, los enlaces se implementan mediante punteros.
Las listas doblemente enlazadas no necesitan un nodo especial para acceder a ellas, pueden
recorrerse en ambos sentidos a partir de cualquier nodo, esto, porque a partir de cualquier nodo,
siempre es posible alcanzar cualquier nodo de la lista, hasta que se llega a uno de los extremos.
Las listas doblemente enlazadas tienen la ventaja de que se puede avanzar y retroceder desde
cualquier nodo, sin necesidad de volver a uno de los extremos de la lista.
Además, se pueden crear listas doblemente enlazadas no ordenadas, existen cientos de problemas
que pueden requerir de este tipo de estructuras.
15
ESTE DOCUMENTO CONTIENE LA SEMANA 3
REFERENCIAS
Cairó, O. y Guardati, S. (2006). Estructura de Datos. 3ª edición. México: Mc Graw Hill.
http://www.c.conclase.net/edd/?cap=005#5_1
Enlazada.
16
ESTE DOCUMENTO CONTIENE LA SEMANA 3