// IG17 2004-05, II17 2005-06 // ColaEnteros.h // 19-11-2004, 18-11-2005 // Ejemplo del Tema 2: clase para representar una cola de numeros // enteros, en la que se insertan y extraen datos siguiendo una // estrategia FIFO (primero en entrar, primero en salir). Para hacer // ambas operaciones en tiempo O(1), se tiene un puntero al primer // elemento (que sera el siguiente que se extraiga) y un puntero al // ultimo elemento (tras el que se hara la siguiente insercion). 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: // // * Prueba a quitar el constructor de copia, el operador de asignacion // y el destructor, y observa lo que sucede. // // * Anyade una funcion Talla() que devuelva el numero de datos // que contiene la cola. Modifica la implementacion para que // la funcion Talla() se ejecute en tiempo O(1). // // * Anyade una funcion Buscar(d) que devuelva true si el dato n // esta en la cola, y false si no. // // * Anyade una funcion Extraer(d) que compruebe si la cola tiene // algun nodo con el dato d y, si es asi, elimine el nodo de la cola // (si no lo encuentra, la cola no se debe modificar; si encuentra varios, // debe eliminarlos todos). // // * Anyade una funcion Comparar(cola2) que devuelva true si las dos colas // contienen los mismos datos en el mismo orden, y false si no. // // * Anyade una funcion Invertir() que invierta el orden de los nodos // en la cola. #ifndef _COLA_ENTEROS #define _COLA_ENTEROS class ColaEnteros { struct Nodo { Nodo *sig; int dato; Nodo(int); }; Nodo *cabeza, *cola; public: ColaEnteros (); ColaEnteros (const ColaEnteros &); ~ColaEnteros (); ColaEnteros & operator= (const ColaEnteros &); void Ver () const; int Sumar () const; bool EstaVacia () const; void Insertar (int numero); int Extraer () throw (int); void Vaciar (); }; #endif