Pilas en C++
Pilas en C++
Pilas en C++
• PILAS(1era definición)
Son unas estructuras que son más utilizadas siempre que se quieran recuperar
una serie de elementos en orden inverso a como se introdujeron.
Aplicaciones de las pilas: el uso más común que suele darse a las pilas es
cuando hacemos una llamada desde un programa a otro subprograma.
Se utiliza las pilas para guardar el lugar desde donde se hizo la llamada y para
almacenar el estado de las variables en el momento en que se hace la llamada.
También se utilizan en todos los algoritmos recursivos para almacenar el valor
de las variables y los parámetros.
Pilas-(2da definición)
Las pilas son estructuras de datos que tienes dos operaciones básicas:
Por esta razón también se conocen como estructuras de datos LIFO (del inglés
Last In First Out). Una posible implementación mediante listas enlazadas sería
insertando y extrayendo siempre por el principio de la lista. Gracias a las pilas
es posible el uso de la recursividad (lo veremos en detalle en el tema
siguiente).
Por ejemplo:
3 + 4 * (8 – 2 * 5)
Operaciones con Pila
estructura
pila ( valor ) / * valor será el tipo de datos que podremos guardar en
la pila */
operaciones
crear_pila ( ) -> pila
apilar ( pila , valor ) -> pila
desapilar ( pila ) -> pila
cima_pila ( pila ) -> valor
pila_vacia ( pila ) -> lógico
axiomas
∀ stack ∈ pila, x ∈ valor se cumple que:
pila_vacia ( crear_pila ( ) ) -> cierto
pila_vacia ( apilar ( stack, x ) ) -> falso
desapilar ( crear_pila ( ) ) -> error
desapilar ( apilar ( stack, x ) ) -> stack
cima_pila ( crear_pila ( ) ) -> error
cima_pila ( apilar ( stack, x ) ) -> x
⇒ Implementación mediante estructuras estáticas
• La forma más simple, y habitual, de representar una pila es mediante un
vector unidimensional. Este tipo de datos permite definir una secuencia
de elementos (de cualquier tipo) y posee un eficiente mecanismo de
acceso a la información contenida en ella.
class Pila
public: ...
private:
Vector vect;
int cima;
};
Algoritmo Pila_Vacia
Entrada
stack: Pila
Salida
( CIERTO, FALSO)
Inicio
Si ( stack.Cima = 0 ) entonces
Devolver ( CIERTO )
Sino
Devolver ( FALSO )
Fin_si
Fin ٭
⇒ Algoritmo Desapilar
⇒ Entrada
⇒ stack: Pila de Valor
⇒ Salida
⇒ stack
⇒ x: Valor
⇒ Variable
⇒ p_aux: Puntero_a_Nodo_pila
⇒ Inicio
⇒ Si ( Pila_Vacia (stack) ) entonces
⇒ Error “ pila_vacia”
⇒ Sino
⇒ p_aux ← stack.Cima
⇒ stack.Cima ← p_aux^.Sig
⇒ Liberar_Espacio (p_aux)
⇒ Fin_si
⇒ Fin
⇒ bool Pila::Desapilar (void) { bool error; Puntero p_aux; if (cima == NULL)
error = true; else { error = false; p_aux = cima; cima = cima->sig; delete
p_aux; } return error;
Algoritmo Cima_Pila
Entradas
Salidas
Valor
Inicio
sino
Devolver (Cima^.Info)
Fin_si
Fin
bool Pila::CimaPila (Valor & x) { bool error; if (cima == NULL) error = true; else
{ error = false; x = cima->info; } return error; }