Está en la página 1de 13

Estructuras de Datos Dinmicas

Contenido del Tema

T E M A 1

1.1. Introduccin a las estructuras de datos dinmicas. 1.2. Tipo Puntero 1.3. Aplicacin: Listas enlazadas.

Elementos de Programacin

Introduccin a las Estructuras de Introducci Datos Din Din micas


Problema

Qu sucede si a priori no conocemos la cantidad de espacio de almacenamiento que vamos a precisar? Solucin
Ejemplo: Tipos TipoPersona TipoPoblacion[1..50] Variables TipoPoblacion poblacion
P rogramacin Modular 2

Hacer una previsin??

Necesidad de Memoria Din Din micas

Ag[1] Nombre1,... Ag[2] Nombre2,... Ag[3] Nombre3,... Ag[4] Nombre4,... Ag[5] ...

Nombre2,... Nombre1,...

Ag
* *

Nombre4,... Nombre3,...

Ag[50]

Variable esttica: Ag [1..50]

* Variable sin nombre (Annimas)

Definici Definici n de Puntero


Que Es un Puntero?

Variable Esttica

Un puntero es una variable que almacena una direccin de memoria

P rogramacin Modular 4

Declaraci Declaraci n de Punteros

Tipos Tipo *TPtrATipo Variables TPtrATipo ptr

1 FORMA

Variables Tipo *ptr

2 FORMA

P rogramacin Modular 5

Variables An An nimas
Variables Z *ptr

Direccin de memoria

MEMORIA ptr
Contenido de la memoria

23423 23419 234343 23420 324237 23421 28 23422 100 23423


Variable Annima
P rogramacin Modular 6

Representacin Gr Representaci Gr fica de las Variables Puntero


Variable Annima

Direccin

ptr

Direccin

23419 23423

23423

100

1 Forma (Como aparece en memoria)

ptr

100

2 Forma (Representacin Grfica)


P rogramacin Modular 7

Operaciones con Punteros


Operacin Cdigo Significado

Desreferenciacin

*ptr

Permite acceder a la variable annima asociada al puntero ptr. Esta comparacin ser verdadera cuando ptr1 y ptr2 apunten a la misma direccin de memoria ptr1 pasa a apuntar a la misma variable annima que ptr2. NIL indica que no apunta a ninguna dir. de memoria
P rogramacin Modular 8

Comparacin

ptr1==ptr2

ptr1=ptr2

Asignacin
ptr=NIL

Punteros y Creaci Creacin de Variables Din Din micas

Operacin

Cdigo

Representacin Grfica

Creacin de una Variable Annima Destruccin de Variable Annima una

ptr
Asigna (ptr) ???

ptr
Libera (ptr)

NIL
P rogramacin Modular 9

Operaciones con Punteros


Tipos Z* TPtrAZ Variables TPtrAZ ptr1, ptr2, ptr4 Inicio Asigna (ptr1) Asigna (ptr2) ptr3=ptr1 *ptr1=3 *ptr2=3 Libera(ptr3) ptr1=NIL

ptr3
ptr3,

ptr2
??? 3

ptr1
??? 3

ptr1==ptr2 ptr1==ptr2

False False

*ptr1==*ptr2 *ptr1==*ptr2 False True ptr1==ptr3 ptr1==ptr3 True True

P rogramacin Modular 10

Introducci Introducci n a las Listas Enlazadas


Tipos TNodo *TPuntANodo REGISTRO TNodo TPersona info TPuntANodo sig FIN Variables TPuntANodo Ag

Nombre2,... Nombre1,... Ag Nombre4,... Nombre3,...

Para acceder a los componentes de un registro desde una variable puntero se utiliza ''

aginfo (*ag).info

Ag
Nombre1,... Nombre2,... Nombre3,... Nombre4,...

Operaciones de Listas Enlazadas


q q q q q q

Insertar un nodo al principio Eliminar el primer nodo Insertar un nodo en una lista enlazada ordenada Eliminar un nodo en una lista enlazada Eliminar todos los nodos de luna lista enlazada Visualizar una lista

P rogramacin Modular 12

Insertar un Nodo al Principio


Asigna (ptr) ptr->dato= 5 ptr->sig= lista lista= ptr

ptr

lista

P rogramacin Modular 13

Eliminar el Primer Nodo


ptr = lista lista = lista->sig Libera(ptr)

ptr

lista

P rogramacin Modular 14

Insertar un Nodo en una Lista Enlazada Ordenada


Asigna(nuevo) nuevo->dato = 10 nuevo->sig = NIL BuscarPosicion nuevo->sig =ptr->sig ptr->sig = nuevo

nuevo ptr ptr


10

lista

12

P rogramacin Modular 15

Insertar un Nodo en una Lista Enlazada Ordenada


Algoritmo InsertaNuevoNodo( ES TPtrAReg lista;E Z dato) Variables TPtrAReg nuevo,ptr Inicio Asigna(nuevo) nuevo->dato= dato nuevo->sig = NIL SI lista == NIL ENTONCES // Si la lista est vaca lista = nuevo ENOTROCASO SI(nuevo->dato<=lista->dato) ENTONCES //Insert. Princip nuevo->sig= lista lista = nuevo ENOTROCASO ptr = lista // Se busca la posicion MIENTRAS ((ptr->sig != NIL ) AND (nuevo->dato >= ptr->sig->dato))HACER ptr = ptr->sig FINMIENTRAS // Insert. Medio o final nuevo->sig = ptr->sig ptr->sig = nuevo; FINSI FINSI Fin
P rogramacin Modular 16

Eliminar un Nodo en una Lista Enlazada


act = lista ant = NIL MIENTRAS (act->dato != dato) HACER ant = act act = act->sig FINMIENTRAS SI ant = NIL ENTONCES lista = lista->sig dato=6 ENOTROCASO ant->sig = act->sig FINSI Liberar (actual)

act

act

lista ant

12

P rogramacin Modular 17

Eliminar Todos los Nodos de una Lista Enlazada


Algoritmo BorrarLista( ES TPtrAReg lista) Variables TPtrAReg nodoABorrar Inicio MIENTRAS lista != NIL HACER nodoABorrar = lista; lista = lista->sig Libera (nodoABorrar) FINMIENTRAS Fin

P rogramacin Modular 18

Visualizar una Lista


Algoritmo visualizaLista(E TPtrAReg lista) Variables TPtrAReg recorrer Inicio recorrer = lista MIENTRAS recorrer != NIL HACER Escribir(recorrer->dato); recorrer = recorrer->sig FINMIENTRAS Fin

P rogramacin Modular 19

Listas enlazadas circulares

El campo de enlace del ltimo nodo apunta al primer nodo de la lista, en lugar de tener el valor NIL No existe ni primer ni ltimo nodo. Tenemos un anillo de elementos enlazados unos con otros

P rogramacin Modular 20

Listas enlazadas circulares

Es conveniente, aunque no necesario, tener un enlace (puntero o ndice) al ltimo nodo lgico de la lista. As podemos acceder facilmente a ambos extremos de la misma Una lista circular vaca vendr representada por un valor NIL o Nulo en p

p p

P rogramacin Modular 21

Listas enlazadas circulares


Algoritmo Imprimir(E TipoLista lista) Variables TipoPuntero ptr Inicio ptr = lista SI (ptr != NIL) ENTONCES REPETIR Escribir(ptr->elemento) ptr = ptr->sig HASTA QUE ptr == lista FINSI Fin

P rogramacin Modular 22

Listas doblemente enlazadas


q

Es una lista enlazada en la que cada nodo tiene al menos tres campos:

Elemento. El dato de la lista. Enlace al nodo anterior. Enlace al nodo siguiente.

Los algoritmos para las operaciones sobre listas doblemente enla zadas son normalmente ms complicados. Pueden ser recorridas fcilmente en ambos sentidos.

lista
P rogramacin Modular 23

Listas doblemente enlazadas


q

Una lista doblemente enlazada puede modificarse para obtener una estructura circular de la misma

lista

P rogramacin Modular 24

BIBLIOGRAFIA
q q

Dale, N. y Weems , C. Pascal. Ed. McGraw Hill, 2 edicin, 1989 Helman, P., Veroff, R. y Carrano, F. Intermediate Problem Solving and Data Structures. Walls & Mirrors. Ed. The Benjamin/ Cummings Publishing, 2 edicin, 1991. Joyanes Aguilar, L. Fundamentos de Programacin. Algoritmos y Estructuras de Datos. Ed. McGraw Hill, 2 edicin, 1996. Tanenbaum, A.M., Augenstein, M.J. Data Structures Using Pascal. Ed. Prentice Hall, 2 edicin, 1986.

P rogramacin Modular 25

También podría gustarte