Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Estructuras Dinmicas
Estn compuestas de pequeas estructuras llamadas nodos o elementos, enlazadas mediante uno o ms apuntadores a objetos del mismo tipo nodo
DATO
DATO
DATO
DATO
DATO
Dependiendo del nmero de apuntadores y de las relaciones entre nodos podemos distinguir varios tipos de estructuras dinmicas
Estructuras Dinmicas
LISTAS
GRAFOS
Estructuras Dinmicas
RBOLES
TABLAS DE HASH
. . . . . .
Estructuras Dinmicas
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
Estructuras Dinmicas
OPERACIONES SOBRE LISTAS
Eliminar un elemento
Localizar un elemento
Estructuras Dinmicas
Listas Simplemente Enlazadas La estructura ms 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!)
Estructuras Dinmicas
Listas Simplemente Enlazadas
L
a1
a2
a3
a4
a5
L
458 458 500 500 850 850 350 350 993 933
a1
a2
a3
a4
a5 nil
Estructuras Dinmicas
Listas Simplemente Enlazadas Lista Vaca
L
nil
Estructuras Dinmicas
Listas Simplemente Enlazadas Declaracin Formal Tipo ptr_Nodo = pointer_to_Nodo; Nodo = Tuple elemento: Tipo_info; prox: ptr_Nodo; end; Lista = ptr_Nodo;
Estructuras Dinmicas
Listas Simplemente Enlazadas
Insercin
Parmetros: Lista (L) , elemento (e), posicin (p) La posicin debe ser vlida (1 <= p <= (Long(L) + 1) Considerar: Insercin en primera posicin, al final de la lista, en lista vaca Procedimiento:
Estructuras Dinmicas
Listas Simplemente Enlazadas
Insercin
a1
a2
Q
a3
a4
a5
ax
Ant L
a1 a2
Act
a3 a4 a5
Q ax
Estructuras Dinmicas
Listas Simplemente Enlazadas Insercin
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; end Q.prox Act; end
Estructuras Dinmicas
Listas Simplemente Enlazadas
Eliminacin
Parmetros: Lista (L) , elemento (e), posicin (p) La posicin debe ser vlida (1 <= p <= (Long(L)) Considerar: Eliminacin en primera posicin, al final de la lista Procedimiento:
Localizar la posicin
Actualizar los apuntadores involucrados Liberar el espacio ocupado por el nodo
Estructuras Dinmicas
Listas Simplemente Enlazadas Eliminacin
Ant L Act
a1
a2
a3
a4
a5
Ant L
Act
a1
a2
a3
a4
a5
Estructuras Dinmicas
Listas Simplemente Enlazadas Eliminacin
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; end Liberar(Act); end
Estructuras Dinmicas
Listas Simplemente Enlazadas con nodo cabecera
El primer nodo de la lista no contiene ningn 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 ningn elemento de la misma
Estructuras Dinmicas
Listas Simplemente Enlazadas con nodo cabecera
L
nodo cabecera
a1 a2 a3 a4
Lista Vaca L
nodo cabecera
Estructuras Dinmicas
Listas Simplemente Enlazadas con nodo cabecera Declaracin Formal Type ptr_Nodo = pointer_to Nodo; Nodo = tuple elemento: Tipo_info; prox: ptr_Nodo; end; Lista = ptr_Nodo;
Estructuras Dinmicas
Listas Simplemente Enlazadas con nodo cabecera
Insercin
Parmetros: Lista (L) , elemento (e), posicin (p) La posicin debe ser vlida (1 <= p <= (Long(L) + 1) No es necesario considerar a parte la insercin en la primera posicin ni en una lista vaca Procedimiento:
Estructuras Dinmicas
Listas Simplemente Enlazadas con nodo cabecera
Insercin
L a1
Q
a2
a5
a6
ax
Ant L
a1
Act
a2 a3 a4
Q ax
Estructuras Dinmicas
Listas Simplemente Enlazadas con nodo cabecera
Insercin
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; end
Estructuras Dinmicas
Listas Simplemente Enlazadas con nodo cabecera
Eliminacin
Parmetros: Lista (L) , elemento (e), posicin (p) La posicin debe ser vlida (1 <= p <= (Long(L)) No es necesario considerar a parte la eliminacin del primer elemento de la lista Procedimiento:
Localizar la posicin
Actualizar los apuntadores involucrados Liberar el espacio ocupado por el nodo
Estructuras Dinmicas
Listas Simplemente Enlazadas con nodo cabecera Eliminacin
Ant L Act
a1
a2
a3
a4
Ant L
Act
a1
a2
a3
a4
Estructuras Dinmicas
Listas Simplemente Enlazadas con nodo cabecera Eliminacin
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); end
Estructuras Dinmicas
Listas Simplemente Enlazadas con nodo cabecera Localizar
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; end return (res); end