Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Memoria dinamica.
Fernando Schapachnik1
1 Departamento de Computaci
on, FCEyN,
Universidad de Buenos Aires, Buenos Aires, Argentina
Fernando Schapachnik
(vaca?(p))
(vaca?(p))
generadores
vaca : pila()
apilar : pila() pila()
otras operaciones
tama
no : pila() nat
axiomas
( pila() : p,
vaca?(vaca)
vaca?(apilar(e,p))
tope(apilar(e,p))
desapilar(apilar(e,p))
tama
no(p)
Fin TAD
Fernando Schapachnik
q) , ( : e)
true
false
e
p
if vaca?(p) then 0 else 1 +
tama
no(desapilar(p)) fi
Pilas, colas y memoria din
amica
(vaca?(c))
(vaca?(c))
generadores
vaca : cola()
encolar : cola() cola()
otras operaciones
tama
no : cola() nat
axiomas
( cola() : c, d)
vaca?(vaca)
vaca?(encolar(e,c))
pr
oximo(encolar(e,c))
desencolar(encolar(e,c))
tama
no(c)
Fernando Schapachnik
, ( : e)
true
false
if vacia?(c) then e else
pr
oximo(c) fi
if vaca?(c) then vaca else
encolar(e, desencolar(c)) fi
if vaca?(c) then 0 else 1 +
Pilas,
colas
y memoria din
amica
tama
no(desencolar(c))
fi
(4) Notemos
Fernando Schapachnik
Y el proximo?
pr
oximo(c) return c.elementos[0];
Fernando Schapachnik
Fernando Schapachnik
(10) Problemas...
Con estas mismas ideas podramos implementar una
secuencia...
...pero la operacion que elimina un elemento de la misma sera
cara, porque involucrara desplazamientos para no dejar
huecos.
Y si no alcanza el tama
no?
Y si sobra?
Y si no lo sabemos a priori?
Algunos lenguajes proveen arreglos redimensionables, pero no
son magicos:
El mecanismo consiste en crear uno mas grande y luego copiar
los elementos.
En seguida veremos c
omo hacer la parte de crear uno mas
grande.
Fernando Schapachnik
Fernando Schapachnik
Fernando Schapachnik
Fernando Schapachnik
Fernando Schapachnik
(15) Ejemplo
1
2
3
4
5
6
7
8
9
10
int x ;
float y ;
int z ;
x=
z=
y=
z=
3;
5;
z +4.3;
x;
return y ;
Fernando Schapachnik
Fernando Schapachnik
Preguntarle al usuario la cantidad
de e n t e r o s a i n g r e s a r (C ) .
R e s e r v a r memoria p a r a C e n t e r o s .
f o r ( i= 1 ; i <=C ; i ++)
Leer y almacenar l o s enteros .
Fernando Schapachnik
(18) Punteros
Por que?
Queremos referirnos a posiciones arbitrarias de la memoria.
Permite utilizar estructuras dinamicas.
Fernando Schapachnik
Fernando Schapachnik
Fernando Schapachnik
(22) Operaciones
Fernando Schapachnik
Fernando Schapachnik
Veamos desencolar(c):
struct nodo_cola *aux;
aux:= c.prim;
// Ahora el "primero" es el que le segu
a.
c.prim:= c.prim->prox;
delete aux;
if (c.cant==1)
c.ult:= NULL;
c.cant-;
Fernando Schapachnik
Fernando Schapachnik
Vimos:
Pilas y colas con arreglos.
Las limitaciones que eso impona.
Memoria dinamica.
Colas en base a listas enlazadas.
Veremos
Pr
oxima te
orica: Complejidad.
Fernando Schapachnik
(28) Tarea
Fernando Schapachnik