// II17 2005-06 // PilaEnteros.h // 18-11-2005 // Ejemplo del Tema 2: pila de numeros enteros // Ejemplo del Tema 2: clase para representar una pila de numeros // enteros, en la que se insertan y extraen datos siguiendo una // estrategia LIFO (ultimo en entrar, primero en salir). Para hacer // ambas operaciones en tiempo O(1), basta un puntero al primer // elemento. Cada nodo tiene un dato de tipo entero y un puntero al // siguiente nodo. // En esta clase, el constructor sin argumentos por defecto, el // operador de asignacion por defecto, el constructor de copia por // defecto y el destructor por defecto NO funcionan correctamente, por // lo que se han implementado tambien. // Ejercicios: // // * Modifica las funciones Apilar y Desapilar para que se puedan utilizar // haciendo, por ejemplo, p.Desapilar().Apilar(55).Apilar(77) // // * Anyade una funcion Comparar(pila2) que devuelva true si las dos pilas // contienen los mismos datos en el mismo orden, y false si no. // // Anyade un operador de comparacion (==) que haga lo mismo // // * Anyade una funcion Invertir() que invierta el orden de los datos // en la pila. // // * Modifica completamente la implementacion, cambiando la lista de nodos // por un vector dinamico cuya talla se duplique cuando se llene, de modo // que la interface de la clase siga siendo la misma. #ifndef _PILA_ENTEROS #define _PILA_ENTEROS class PilaEnteros { struct Nodo { int dato; Nodo *sig; Nodo(int, Nodo* = NULL); }; Nodo *datos; int talla; // Manteniendo este campo podemos ejecutar Talla() en tiempo O(1) public: PilaEnteros(); PilaEnteros (const PilaEnteros &); PilaEnteros & operator= (const PilaEnteros &); ~PilaEnteros(); void Vaciar(); bool EstaVacia() const; int Talla() const; void Ver() const; void Apilar(int); void Desapilar(); // No hace nada si se llama con una pila vacia int & Tope() throw(int); // No modifica la pila. // Devuelve el dato por referencia para poder usarla a la izquierda // de la asignacion para cambiar el dato en el tope de la pila. // Lanza una excepcion si se llama con una pila vacia. }; #endif