Gestión Dinámica de Memoria. El Tipo Puntero

Anuncio
Gestión Dinámica de
Memoria. El Tipo Puntero
Contenido del Tema
T
E
M
A
4.1. Introducción
4.2. El tipo puntero
4.3. Operaciones con punteros.
4.4. Concepto de lista enlazada.
4.5. Operaciones básicas sobre listas enlazadas.
4.6. Otras clases de listas enlazadas.
4
Metodología de Programación
Introducción: Estructuras de
Datos Dinámicas
• Variables estáticas:
– Se conoce su nombre.
– Se conoce cuando empieza/acaba
su existencia.
– Se conoce el espacio que ocupan
en memoria.
Metodología de Programación
1
Introducción: Estructuras de
Datos Dinámicas
Problema
¿Qué sucede si a priori no conocemos la cantidad de espacio
de almacenamiento que vamos a precisar?
Solución
¿ Hacer una previsión?
Ejemplo:
TIPOS
TipoPoblacion = ARRAY [1..50] DE TipoPersona
VARIABLES
poblacion
: TipoPoblacion
Metodología de Programación
Introducción: Estructuras de
Datos Dinámicas
• Variables anónimas:
– No se conoce su nombre.
– No se conoce el momento en que
empieza/acaba su existencia.
– El espacio que van a ocupar en
memoria es variable.
Metodología de Programación
2
El Tipo Puntero
¿Que Es un Puntero?
Variable Estática
Un puntero es una variable que almacena una
dirección de memoria
Metodología de Programación
Declaración de Punteros
TIPOS
PtrATipo =PUNTERO A Tipo
VARIABLES
ptr: PtrATipo
VARIABLES
ptr: PUNTERO A Tipo
Metodología de Programación
3
Variables Anónimas
VARIABLES ptr : PUNTERO A ENTERO
de
MEMORIA
23423 23419
ptr
234343 23420
"
#
$
%
!
$
&
!
'
(
324237 23421
28 23422
#
100 23423
Variable Anónima
Metodología de Programación
Representación Gráfica de
las Variables Puntero
Dirección
23419
Dirección
ptr
23423
23423
Variable
Anónima
100
1ª Forma
ptr
100
2ª Forma
Metodología de Programación
4
Punteros y Creación de
Variables Dinámicas
Inicialización de Punteros:
ptr ← NULO
ptr
Creación de una Variable Anónima:
ptr ← NUEVO(Tipo)
ptr
??
Destrucción de una Variable Anónima:
ptr
ELIMINAR(ptr)
Metodología de Programación
Operaciones con Punteros
Dereferenciación: ptr^
Comparación:
ptr1 = ptr2
Asignación:
ptr1 ← ptr2
Ejemplo:
Ptr1 ← NUEVO(ENTERO)
Escribir(ptr1^) ??
ptr1^ ← 3
Escribir(ptr2^) ??
ptr2 ← ptr1
ptr2^ ← 1000
Metodología de Programación
5
Ejemplo: Cadena de
Caracteres Dinámica
TIPOS
Tlista
INFO
VARIABLES
= PUNTERO A INFO
= REGISTRO
dato : CARÁCTER
sig : Tlista
FINREGISTRO
Primero: Tlista
Gráficamente:
Primero
“H”
“o”
“l”
“a”
Metodología de Programación
Ejemplo: Cadena de
Caracteres Dinámica
FUNC CrearLista():Tlista
CONSTANTES
RETORNO = CHR(13)
VARIABLES
car
: CARÁCTER
primero, ptr
: Tlista
INICIO
Leer(car)
SI (car = RETORNO) ENTONCES
primero ← NULO
ENOTROCASO
primero ← NUEVO(INFO)
primero^.dato ← car
ptr ← primero
Leer(car)
MIENTRAS (car ≠ RETORNO) HACER
ptr^.sig ← NUEVO(INFO)
ptr
← ptr^.sig
ptr^.dato ← car
Leer(car)
FINMIENTRAS
ptr^.sig ← NULO
FINSI
RESULTADO ← primero
FIN
Metodología de Programación
6
Operaciones sobre Listas
Enlazadas
INICIALIZACION
)
*
+
+
,
-
.
*
lista
lista ← NULO
/
0
0
1
2
3
4
lista
lista ← NUEVO(INFO)
??
lista ← NULO
lista
??
Metodología de Programación
Visualizar una Lista
PROC visualizaLista(↓lista: Tlista)
VARIABLES
recorrer : Tlista
INICIO
recorrer ← lista
MIENTRAS (recorrer ≠ NULO) HACER
Escribir(recorrer^.dato)
recorrer ← recorrer^.sig
FINMIENTRAS
FIN
Metodología de Programación
7
Insertar un Nodo al
Principio
Suponiendo:
lista
3
2
9
1.- ptr ← NUEVO(INFO)
ptr
??
??
Metodología de Programación
Insertar un Nodo al
Principio
2.- ptr^.dato ← 5
ptr
5
??
3.- ptr^.sig ← lista
lista
3
2
9
ptr
5
Metodología de Programación
8
Insertar un Nodo al
Principio
4.- lista ← ptr
lista
3
2
9
ptr
5
Metodología de Programación
Eliminar el Primer Nodo
Suponiendo:
lista
3
2
9
1.- ptr ← lista
lista
3
2
9
ptr
Metodología de Programación
9
Eliminar el Primer Nodo
2.- lista ← lista^.sig
lista
3
2
9
ptr
3.- ELIMINAR(ptr)
lista
2
9
ptr
Metodología de Programación
Insertar un Nodo en una
Lista Enlazada Ordenada
Partimos de la lista:
Queremos insertar
el número: 15
lista
2
9
19
1.- nuevoNodo ← NUEVO(INFO)
nuevoNodo
??
??
Metodología de Programación
10
Insertar un Nodo en una
Lista Enlazada Ordenada
2.- nuevoNodo^.dato ← 15
nuevoNodo^.sig ← NULO
nuevoNodo
15
3.- Algoritmo que inserta el nodo
en la posición correcta.
Metodología de Programación
Insertar un Nodo en una
Lista Enlazada Ordenada
PROC InsertaNuevoNodo( ↓↑ lista: Tlista; ↓ dato: ENTERO)
VARIABLES
ENOTROCASO
nuevoNodo
: Tlista
buscaPosicion ← lista
MIENTRAS (buscaPosicion^.sig ≠ NULO)
buscaPosicion: Tlista
∧ (nuevoNodo^.dato >=
INICIO
buscaPosicion^.sig^.dato)) HACER
nuevoNodo ← NUEVO(INFO)
buscaPosicion ← buscaPosicion^.sig
nuevoNodo^.dato ← dato
FINMIENTRAS
nuevoNodo^.sig ← NULO
nuevoNodo^.sig ← buscaPosicion^.sig
SI (lista = NULO) ENTONCES
buscaPosicion^.sig ← nuevoNodo;
/* Si la lista está vacía */
FINSI
lista ← nuevoNodo
FINSI
ENOTROCASO
FIN
SI (nuevoNodo^.dato <=
lista^.dato) ENTONCES
nuevoNodo^.sig ← lista
lista
←nuevoNodo
Metodología de Programación
11
Insertar un Nodo en una
Lista Enlazada Ordenada
Gráficamente:
buscaPosicion
lista
2
9
19
nuevoNodo
15
Metodología de Programación
Eliminar un Nodo de una
Lista Enlazada
Suponiendo:
lista
2
1.- actual
anterior
6
9
Queremos borrar el
número: 6
Supondremos que
está en la lista.
← lista
← NULO
lista
2
actual
6
anterior
9
Metodología de Programación
12
Eliminar un Nodo de una
Lista Enlazada
2.- Búsqueda del nodo a borrar.
MIENTRAS (actual^.dato ≠ dato) HACER
anterior ← actual
actual
← actual^.sig
FINMIENTRAS
lista
2
6
anterior
9
actual
Metodología de Programación
Eliminar un Nodo de una
Lista Enlazada
3.- Actualizar los punteros
SI (anterior = NULO) ENTONCES
lista ← lista^.sig
ENOTROCASO
anterior^.sig ← actual^.sig
FINSI
actual
6
lista
2
anterior
9
Metodología de Programación
13
Eliminar un Nodo de una
Lista Enlazada
4.- ELIMINAR(actual)
actual
lista
2
9
anterior
Metodología de Programación
Eliminar Todos los Nodos
de una Lista Enlazada
PROC borrarLista(↓↑ lista: Tlista)
VARIABLES
nodoABorrar: Tlista
INICIO
MIENTRAS (lista ≠ NULO) HACER
nodoABorrar ← lista
lista
← lista^.sig
ELIMINAR(nodoABorrar)
FINMIENTRAS
FIN
Metodología de Programación
14
BIBLIOGRAFIA
• Pascal. Dale/Orshalick. Ed. McGraw Hill 1986
• Programación I. José A. Cerrada y Manuel
Collado. U.N.E.D. 1993.
• Fundamentos de Programación. Joyanes
Aguilar. McGraw Hill. 1988.
• Programación en C++. Algoritmos, estructuras
de datos y objetos. Joyanes, Aguilar. McGraw
Hill, 2000
5
Metodología de Programación
15
Descargar