La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Estructuras Dinámicas

Presentaciones similares


Presentación del tema: "Estructuras Dinámicas"— Transcripción de la presentación:

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


Descargar ppt "Estructuras Dinámicas"

Presentaciones similares


Anuncios Google