Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Estructuras Dinámicas
Cambian de tamaño durante la ejecución del programa Es imposible reservar una cantidad fija de espacio de almacenamiento La reservación de memoria y asignación de direcciones se lleva a cabo mediante la asignación dinámica de almacenamiento Uso de apuntadores
2
Estructuras Dinámicas
Están compuestas de pequeñas estructuras llamadas nodos o elementos, enlazadas mediante uno o más apuntadores a objetos del mismo tipo nodo DATO DATO Dependiendo del número de apuntadores y de las relaciones entre nodos podemos distinguir varios tipos de estructuras dinámicas
3
Estructuras Dinámicas
LISTAS GRAFOS
4
Estructuras Dinámicas
ÁRBOLES ... TABLAS DE HASH
5
Estructuras Dinámicas
LISTAS Listas simplemente enlazadas Listas simplemente enlazadas con nodo cabecera Listas circulares doblemente enlazadas con nodo cabecera Listas doblemente enlazadas con nodo cabecera Listas circulares simplemente enlazadas Listas circulares simplemente enlazadas con nodo cabecera Listas circulares doblemente enlazadas
6
Estructuras Dinámicas
OPERACIONES SOBRE LISTAS Insertar o añadir un elemento Eliminar un elemento Localizar un elemento
7
Estructuras Dinámicas
Listas Simplemente Enlazadas La estructura más simple Conjunto de registros o nodos (no necesariamente adyacentes en memoria) Cada registro contiene un elemento y un apuntador a un registro que contiene su sucesor El apuntador del último registro de la lista contiene el valor nil Se requiere de un apuntador que referencie o apunte al primer elemento de la misma (¡nunca debe perderse!)
8
Estructuras Dinámicas
Listas Simplemente Enlazadas a1 L a2 a3 a4 a5 L a1 500 a2 850 a3 350 a4 933 a5 nil 458 993
9
Estructuras Dinámicas
Listas Simplemente Enlazadas Lista Vacía L nil
10
Estructuras Dinámicas
Listas Simplemente Enlazadas Declaración Formal Tipo ptr_Nodo = pointer_to_Nodo; Nodo = Tuple elemento: Tipo_info; prox: ptr_Nodo; end; Lista = ptr_Nodo;
11
Estructuras Dinámicas
Listas Simplemente Enlazadas Inserción Parámetros: Lista (L) , elemento (e), posición (p) La posición debe ser válida (1 <= p <= (Long(L) + 1) Considerar: Inserción en primera posición, al final de la lista, en lista vacía Procedimiento: Crear el nodo con el elemento Localizar la posición Actualizar los apuntadores involucrados
12
Estructuras Dinámicas
Listas Simplemente Enlazadas Inserción a1 L a2 a3 a4 a5 ax Q a1 L a2 a3 a4 a5 ax Q Ant Act
13
Estructuras Dinámicas
Listas Simplemente Enlazadas Inserción Proc Insertar(in-out L: Lista; in pos: integer; in e: Tipo_Info) Var Act, Ant, Q: ptr_Nodo; i: integer; begin Act L; i 1; Crear(Q); Q.elemento e; while (i < pos) do Ant Act; Act Act.prox; i i + 1; end if Act = L then L Q; else Ant.prox Q; Q.prox Act;
14
Estructuras Dinámicas
Listas Simplemente Enlazadas Eliminación Parámetros: Lista (L) , elemento (e), posición (p) La posición debe ser válida (1 <= p <= (Long(L)) Considerar: Eliminación en primera posición, al final de la lista Procedimiento: Localizar la posición Actualizar los apuntadores involucrados Liberar el espacio ocupado por el nodo
15
Estructuras Dinámicas
Listas Simplemente Enlazadas Eliminación a1 L a2 a3 a4 a5 Ant Act
16
Estructuras Dinámicas
Listas Simplemente Enlazadas Proc Eliminar (in-out L: Lista; in pos: integer) Var Act, Ant: ptr_Nodo; i: integer; begin Act L; i 1; while (i < pos) do Ant Act; Act Act.prox; i i + 1; end if Act = L then L Act.prox; else Ant.prox Act.prox; Liberar(Act); Eliminación
17
Estructuras Dinámicas
Listas Simplemente Enlazadas con nodo cabecera El primer nodo de la lista no contiene ningún elemento. La lista está referenciada por el apuntador contenido en el nodo cabecera Por lo general el nodo cabecera es del mismo tipo de los nodos restantes de la lista a pesar de que este no contiene ningún elemento de la misma
18
Estructuras Dinámicas
Listas Simplemente Enlazadas con nodo cabecera L nodo cabecera a1 a2 a3 a4 Lista Vacía L nodo cabecera
19
Estructuras Dinámicas
Listas Simplemente Enlazadas con nodo cabecera Declaración Formal Type ptr_Nodo = pointer_to Nodo; Nodo = tuple elemento: Tipo_info; prox: ptr_Nodo; end; Lista = ptr_Nodo;
20
Estructuras Dinámicas
Listas Simplemente Enlazadas con nodo cabecera Inserción Parámetros: Lista (L) , elemento (e), posición (p) La posición debe ser válida (1 <= p <= (Long(L) + 1) No es necesario considerar a parte la inserción en la primera posición ni en una lista vacía Procedimiento: Crear el nodo con el elemento Localizar la posición Actualizar los apuntadores involucrados
21
Estructuras Dinámicas
Listas Simplemente Enlazadas con nodo cabecera Inserción L a1 a2 a5 a6 Q ax L a1 a2 a3 a4 ax Q Ant Act
22
Estructuras Dinámicas
Listas Simplemente Enlazadas con nodo cabecera Inserción Proc Insertar (in-out L: Lista; in pos: integer; in e: Tipo_Info) Var Act, Ant, Q: ptr_Nodo; i: integer; begin Act L; i 1; Crear(Q); Q.elemento e; while (i < pos) do Ant Act; Act Act.prox; i i + 1; end Ant.prox Q; Q.prox Act;
23
Estructuras Dinámicas
Listas Simplemente Enlazadas con nodo cabecera Eliminación Parámetros: Lista (L) , elemento (e), posición (p) La posición debe ser válida (1 <= p <= (Long(L)) No es necesario considerar a parte la eliminación del primer elemento de la lista Procedimiento: Localizar la posición Actualizar los apuntadores involucrados Liberar el espacio ocupado por el nodo
24
Estructuras Dinámicas
Listas Simplemente Enlazadas con nodo cabecera Eliminación Ant Act L a1 a2 a3 a4 Ant Act L a1 a2 a3 a4
25
Estructuras Dinámicas
Listas Simplemente Enlazadas con nodo cabecera Eliminación Proc Eliminar (in-out L: Lista; in pos: integer) Var Act, Ant: ptr_Nodo; i: integer; Begin Act L; i 1; while (i < pos) do Ant Act; Act Act.prox; i i + 1; end Ant.prox Act.prox; Liberar(Act);
26
Estructuras Dinámicas
Listas Simplemente Enlazadas con nodo cabecera Func Localizar(L: Lista; e: Tipo_Info): integer Var Act: ptr_Nodo; i, res: integer; begin Act L.prox; i 1; while (Act nil Act.info e) do Act Act.prox; i i + 1; end if Act = nil then res -1; else res i; return (res); Localizar
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.