#ifndef _PILADELIM_HPP #define _PILADELIM_HPP // Constantes y tipos previos const unsigned TAM_MAX = 1000; // Interfaz del TAD PilaDelim. Pre-declaraciones: /* Los valores del TAD PilaDelim representan una pila de caracteres * delimitadores de apertura, que sigue un comportamiento LIFO (Last * In, First Out). Se pueden almacenar caracteres como ('(', '{', '['*) * para realizar validaciones de apertura y cierre de delimitadores * en una expresión. Los valores de PilaDelim disponen de operaciones * que permiten apilar caracteres, desapilar el último carácter, * consultar el tope de la pila y verificar si la pila está vacía. */ struct PilaDelim; /* Crea una pila vacía (es decir, que no contiene ningún * carácter delimitador de apertura) */ void inicializar(PilaDelim& p); /* Si c es un carácter delimitador de apertura, y p no está * llena, entonces devuelve en el mismo parámetro p la pila * resultante de añadir c a p y error = falso. En cualquier otro * caso, la pila p no se modifica y error = verdad */ void apilar(PilaDelim& p, char c, bool& error); /* Si p no es vacía, devuelve la pila resultante de eliminar * el último elemento que fue apilado, dejándolo en c, y error = falso. * Si la pila es vacía, error = verdad */ void desapilar(PilaDelim& p, char& c, bool& error); /* Si p no es vacía, devuelve en c el último elemento apilado en p y * error = falso. En caso contrario, error = verdad y c está indefinido */ void cima(const PilaDelim& p, char& c, bool& error); /* Devuelve verdad si y sólo si p no tiene elementos */ bool estaVacia(const PilaDelim& p); // Declaración struct PilaDelim { friend void inicializar(PilaDelim& p); friend void apilar(PilaDelim& p, char c, bool& error); friend void desapilar(PilaDelim& p, char& c, bool& error); friend void cima(const PilaDelim& p, char& c, bool& error); friend bool estaVacia(const PilaDelim& p); friend bool estaLlena(const PilaDelim& p); private: // Representación interna de los valores del TAD char datos[TAM_MAX]; int tope; }; #endif