Estructuras de Datos
Estructuras de Datos
LISTAS
DOBLEMENTE
ENLAZADAS
Preguntas detonadoras
¿Qué es una lista doble?
¿Cómo se clasifican las listas dobles?
¿Qué características distinguen a una lista doble?
¿Cómo se representa gráficamente una lista doble?
¿Qué operaciones se pueden realizar en una lista
doble?
¿Por qué es una estructura dinámica?
¿Cómo se diseña un modelo orientado a objetos con
una lista doble?
Lista doble
Es una estructura de datos dinámica que se
compone de un conjunto de nodos en secuencia
enlazados mediante dos apuntadores (uno hacia
adelante y otro hacia atrás)
Nodos
Apuntadores (referencia) 4
Nodo
inicial nulo
nulo Nodo
final
Listas
dobles
Con datos desordenados
Desordenados
El nuevo dato se agrega al final de la lista doble
7
Arquitectura de un nodo
Cada nodo tiene 3 secciones:
1. Dato (puede ser simple o compuesto)
2. Apuntador o referencia que enlaza al siguiente
nodo en secuencia lógica
3. Apuntador que enlaza al nodo anterior
Apuntador Dato
al nodo Apuntador
anterior al siguiente
nodo
10
10
11
12
13
13
Notación de colores
Los estudiantes deben poner especial
atención a los colores usados en las figuras
explicativas del resto del curso.
Los objetos estarán identificados por colores
Objetos “rojos”.- Contienen los datos que se
desean almacenar y ordenar en la lista
Objetos “azules”.- Representan los nodos de la
lista doble
Objeto “verde”.- Es la lista doble
14
14
Diseño de clases
Nodo nulo
inicial
Nodo
nulo
final
15
objetoConDatos
anterior siguiente
16
16
17
17
Diseño de la ClaseNodo
Clase parametrizada para
recibir cualquier tipo de
objeto “rojo”
El parámetro <Tipo>
define el tipo de objeto
“rojo” que estará dentro de
cada nodo “azul”
Los apuntadores
Siguiente y Anterior
NO almacenan otro nodo
“azul” sino apuntan hacia
otro nodo de su mismo tipo
Al eliminar un nodo “azul”, su destructor elimina el objeto
“rojo” que contiene 18
18
19
20
Nodo
inicial nulo
nodoPrevio
nodoActual
Termina el
recorrido
21
21
Nodo
nulo final
nodoPrevio
nodoActual
Termina el
recorrido 22
22
23
23
Situaciones críticas
Son las situaciones que se pueden
presentar al realizar operaciones con
estructuras de datos
24
24
25
Nodo
inicial nulo
nulo 5 Nodo
final
26
26
Nodo
nulo
inicial
nulo 5 1 2
Nodo final
nodoPrevio
nodoActual nodoNuevo 27
27
28
28
Composición Lista-Nodo
¿Por qué es una composición 1..2 si la
lista doble tiene muchos nodos dentro
de ella?
Porque la cardinalidad de una
composición se define por la cantidad de
atributos de tipo “parte” contenidos en
la clase del “todo” (regla 1 de la
composición)
29
29
ClaseListaDobleDesordenada<Tipo>
Clase parametrizada para prepararla para que
pueda recibir cualquier Tipo de objeto “rojo”
Tiene una restricción de tipos para “obligar” a
que la clase “roja” implemente IEquatable
Se requiere el método Equals() para buscar
un objeto “rojo” almacenado en la lista
30
Componentes de la clase
_nodoInicial.- Atributo privado que apunta al
primer nodo de la lista doble
_nodoFinal.- Atributo privado que apunta al
último nodo de la lista doble
ClaseListaDobleDesordenada().- Es el
constructor que inicializa vacía la lista.
31
32
33
~ClaseListaDobleDesordenada().-
Destructor que invoca al método
Vaciar() para eliminar todos los nodos
de la lista doble.
34
34
35
36
36
37
Tarea 1.09
Resolver la Tarea 1.09.- Diseño de
la clase “roja” de la lista doble en
MS Teams
Subir el archivo *.vsdx con
el diagrama de la clase
“roja” elaborado en
Microsoft Visio
Incluir las interfaces
correspondientes 38
38
39
39
40
Investigación
• Agregue un botón a su aplicación
para crear 10 nodos con datos
generados de manera aleatoria
41
42
43
43
44
45
Nodo
nulo
inicial
nulo 4 1 3 2 Nodo
final
nodoActual
46
46
Nodo
nulo
inicial
nulo 4 1 3 2 Nodo
final
nodoPrevio nodoActual
47
47
nodoPrevio nodoActual
48
48
Nodo nulo
inicial
nulo
3 Nodo
final
nodoPrevio nodoActual
49
49
Eliminación de objetos
La forma natural de borrar un objeto es
asignarle el valor null
// Creación del objeto “azul” del nodoActual
ClaseNodo<Tipo> nodoActual = new ClaseNodo<Tipo>();
.
.
nodoActual = null; // Eliminación del nodoActual
50
51
52
52
53
53
54
54
55
55
nodoActual
56
56
nodoPrevio
Nodo
Inicial nulo
nulo 4 1 3
nulo 2 Nodo
final
nodoActual
Termina el
recorrido
57
57
58
58
59
59
Nivel de abstracción
Nodo nulo
inicial
Nodo
nulo
final
60
61
61
“Pensar en objetos …”
El objeto “verde” NO compara los objetos “rojos” (ellos mismos
se comparan entre sí).
El objeto “verde” NO requiere acceso a los componentes de los
objetos “rojos” para manipularlos.
Recibe cualquier tipo de objetos “rojos” …
¡¡¡ SIN MODIFICAR NI UNA LÍNEA DE SU CÓDIGO!!!
¿Cómo lo logra? …
Clases parametrizadas
Uso de interfaces
Composición
Comportamiento polimórfico
Restricción de tipos 62
62
63
64
65
66