Tema 5. Estructura de datos Pila - Repositori UJI

Anuncio
Tema 5. Estructura de datos Pila
http://aulavirtual.uji.es
José M. Badía, Begoña Martínez, Antonio Morales y José M. Sanchiz
{badia, bmartine, morales, sanchiz}@icc.uji.es
Estructuras de datos y de la información
Universitat Jaume I
Índice
1. Definición y aplicaciones
5
2. Tipo Abstracto de Datos Pila
10
3. La clase stack
11
4. Implementación estática
12
Bibliografía
ä (Nyhoff’06), Capítulo 7
ä (Main y Savitch’01), Capítulo 7
ä (Drozdek’01), Capítulo 4
Tema 5. Estructura de datos Pila – 3 / 20
I testtesttesttesttest
Objetivos
ä Conocer el concepto, funcionamiento y utilidad del tipo Pila.
ä Conocer el TAD Pila y sus operaciones asociadas.
ä Saber utilizar el tipo Pila para resolver problemas.
ä Saber implementar el tipo Pila mediante el uso de vectores.
Tema 5. Estructura de datos Pila – 4 / 20
I testtesttesttesttest
1 Definición y aplicaciones
ä Pila=Estructura lineal manejada siguiendo una política
LIFO: Last In First Out.
ä Tope: Posición en la que se insertan y eliminan
elementos de la pila.
ä Concepto manejado de modo cotidiano: pila de platos,
bandejas, ...
Tema 5. Estructura de datos Pila – 5 / 20
I testtesttesttesttest
1 Definición y aplicaciones (II)
ä Operaciones de manipulación:
í Apilar: Añade un elemento en la posición siguiente al tope actual.
í Desapilar: Elimina el elemento situado en el tope.
Apilar
Apilar
Apilar
tope
tope
tope
E1
Tema 5. Estructura de datos Pila – 6 / 20
I testtesttesttesttest
E2
E1
Desapilar
Apilar
E3
E2
E1
tope
tope
E2
E1
E4
E2
E1
1 Definición y aplicaciones (III)
ä La Pila es una estructura de datos dinámica.
í Su tamaño no queda definido en tiempo de compilación.
í Las operaciones del TAD permiten modificar su tamaño.
¿ Restricciones de tamaño?
Tema 5. Estructura de datos Pila – 7 / 20
I testtesttesttesttest
1 Definición y aplicaciones (IV)
Aplicación. Llamadas a procedimiento
ä Problemas en los que los datos se manejan siguiendo una política LIFO.
r-1:
r:
PROGRAM P
PROC A1();
PROC A2();
PROC A3();
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
A3();
. . . .
. . . .
. . . .
. . . .
. . . .
A1();
s-1:
. . . .
A2();
s:
t-1:
. . . .
. . . .
t:
. . . .
END.
END;
END;
END;
t
r
Tras llamar
a A1
Tema 5. Estructura de datos Pila – 8 / 20
I testtesttesttesttest
s
s
s
r
r
r
r
Tras llamar
a A3
Al volver
de A3
Al volver
de A2
Tras llamar
a A2
1 Definición y aplicaciones (V)
Una Pila es una estructura ordenada, lineal y homogénea, en la que podemos insertar
o extraer elementos en una única posición llamada Tope, siguiendo una política LIFO.
ä Ordenada: Los elementos se sitúan en un cierto orden. Sus valores NO tienen
porque estar ordenados.
ä Homogénea: Todos los elementos son del mismo tipo. Pueden ser de cualquier
tipo: simple o compuesto.
Tema 5. Estructura de datos Pila – 9 / 20
I testtesttesttesttest
28
a
v
p
g
7
t
b e
r
12
m t
v
e
2 Tipo Abstracto de Datos Pila
TAD Pila
Axiomas: ∀ S∈Pila, ∀ e∈tb,
Usa logico, tb
1) PilaVacia(CrearPila) = Verdadero
Operaciones:
2) PilaVacia(Apilar(S,e)) = Falso
CrearPila: → Pila
3) Desapilar(CrearPila) = error
PilaVacia: Pila → logico
4) Desapilar(Apilar(S,e)) = S
Tope: Pila → tb
5) Tope(CrearPila) = error
Apilar: Pila x tb → Pila
6) Tope(Apilar(S,e)) = e
Desapilar: Pila → Pila
Tema 5. Estructura de datos Pila – 10 / 20
I testtesttesttesttest
3 La clase stack
class s t a c k {
public :
stack ( ) ;
bool empty ( ) const ;
const i n t & t o p ( ) const ;
void push ( const i n t & dato ) ;
void pop ( ) ;
private :
...
};
Tema 5. Estructura de datos Pila – 11 / 20
I testtesttesttesttest
4 Implementación estática
Diferencias entre vector y Pila
Vector
Pila
ä Puede accederse a cualquiera de
ä Sólo puede accederse al elemento
sus elementos.
ä Tiene un número limitado de
elementos.
situado en el tope.
ä No tiene restricciones teóricas de
tamaño.
Cuestión de implementación
ä Los vectores tienen un tamaño limitado ⇒ Pueden llenarse.
¿PilaLlena?
Tema 5. Estructura de datos Pila – 12 / 20
I testtesttesttesttest
4 Implementación estática (II)
Primera opción
Pila = vector
ä La posición del tope se mantiene fija en el elemento 0 del vector.
ä Los elementos se desplazan al apilar y desapilar.
tope
8
tope 5
8
tope
1
5
8
tope
9
1
tope
5
8
Problema
ä Coste elevado de las operaciones apilar y desapilar.
Tema 5. Estructura de datos Pila – 13 / 20
I testtesttesttesttest
1
5
8
tope
3
1
5
8
4 Implementación estática (III)
Segunda opción
Pila = vector + entero
ä El vector guarda los elementos de la pila.
ä El entero indica la posición "móvil" del tope.
Clase Pila
e8
e7
tope
•
•
•
e1
Tipo abstracto
Ventaja
ä Coste constante de las operaciones.
Tema 5. Estructura de datos Pila – 14 / 20
I testtesttesttesttest
8
atributo tope
MaxElem
e1
...
e7
e8
...
atributo elementos
Implementación mediante un vector
4 Implementación estática (IV)
Definición del tipo - fichero stack.h
# i f n d e f STACK
# d e f i n e STACK
const i n t MaxElem = 1 2 8 ;
class s t a c k {
public :
/ / D e f i n i c i ó n de l a s operaciones p ú b l i c a s
private :
i n t elementos [ MaxElem ] ;
i n t tope ;
};
#endif
Tema 5. Estructura de datos Pila – 15 / 20
I testtesttesttesttest
4 Implementación estática (V)
ä Implementación de las operaciones - fichero stack.cpp
/ ∗ Crea una p i l a v a c í a ∗ /
stack : : stack ( ) {
tope = − 1;
}
/ ∗ Comprueba s i l a p i l a e s t a v a c í a ∗ /
bool s t a c k : : empty ( ) const {
r e t u r n ( tope = = − 1 ) ;
}
Tema 5. Estructura de datos Pila – 16 / 20
I testtesttesttesttest
4 Implementación estática (VI)
/ ∗ Devuelve e l elemento s i t u a d o en e l tope ∗ /
const i n t & s t a c k : : t o p ( ) const {
i f ( ! empty ( ) )
r e t u r n elementos [ tope ] ;
else
cerr
<< " Error : P i l a vacia " < < endl ;
}
ä Devuelve el elemento, NO lo desapila
Tema 5. Estructura de datos Pila – 17 / 20
I testtesttesttesttest
4 Implementación estática (VII)
/ ∗ A p i l a un elemento " por encima " d e l tope ∗ /
void s t a c k : : push ( const i n t & dato ) {
i f ( tope < MaxElem − 1 ) { / / ¿ F i n a l d e l v e c t o r ?
++ tope ;
elementos [ tope ] = dato ;
}
else
c e r r < < " Error : P i l a l l e n a " < < endl ;
}
Tema 5. Estructura de datos Pila – 18 / 20
I testtesttesttesttest
4 Implementación estática (VIII)
/ ∗ D e s a p i l a e l elemento s i t u a d o en e l tope ∗ /
void s t a c k : : pop ( ) {
i f ( ! empty ( ) )
tope −−;
else
cerr
<< " Error : P i l a vacia " < < endl ;
}
ä El elemento no se "borra"del vector
tope
4
elementos
d
m e
l
s
0
1
3
4
2
Tema 5. Estructura de datos Pila – 19 / 20
I testtesttesttesttest
•••
tope
3
elementos
d
m e
l
s
0
1
3
4
2
•••
4 Implementación estática (IX)
ä Problema
Array: estructura estática
Pila: estructura dinámica
ä Consecuencias
í Reserva de un espacio fijo en tiempo de compilación.
í Posibilidad de llenado del vector ⇒ Llenado de la pila.
í Espacio reservado máximo ⇒ Desaprovechamiento de memoria.
ä Solución
í Uso de memoria dinámica.
Tema 5. Estructura de datos Pila – 20 / 20
I testtesttesttesttest
Descargar