Sei sulla pagina 1di 26

Estructuras Dinmicas

Cambian de tamao durante la ejecucin del programa


Es imposible reservar una cantidad fija de espacio de almacenamiento La reservacin de memoria y asignacin de direcciones se lleva a cabo mediante la asignacin dinmica de almacenamiento Uso de apuntadores

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

Insertar o aadir un elemento

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:

Crear el nodo con el elemento


Localizar la posicin Actualizar los apuntadores involucrados

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:

Crear el nodo con el elemento


Localizar la posicin Actualizar los apuntadores involucrados

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

Potrebbero piacerti anche