Hola, en una asignatura llamada "Tipos Abstractos de Datos" hemos empezado a dar las clases en C++, o lo que es lo mismo, nos han dado un manual que no se entiende nada y un plazo para terminar una práctica.
Llevo todo el finde mirando manuales por la red y no me aclaro nada, no soy capaz ni de trabajar con una simple cola. Se nos ha suministrado el fichero .hpp, el cual no podemos modificar y tenemos que crear el .cpp con la implementación de las funciones que aparecen en dicho fichero.
//Cola.hpp
#ifndef __Cola__
#define __Cola__
class Cola{
public:
// los elementos de la cola son de tipo entero
typedef int Item;
// constructor de la clase. Inicializa una cola y la deja sin elementos
Cola();
// destructor de la clase. Libera los recursos ocupados cuando acaba el ambito del objeto
~Cola();
// agrega el elemento x como ultimo elemento de la cola
void meter(Item x);
// devuelve el primer elemento de la cola. Si esta vacia, eleva la excepcion ColaVacia
Item frente() const;
// elimina el primer elemento de la cola
void sacar();
// devuelve verdadero si no hay elementos en la cola, falso en caso contrario
bool esVacia() const;
// excepciones que se elevan en caso de error
enum ErrorCola{ColaVacia};
private:
// tipos privados
struct Nodo{
Item dato;
Nodo * siguiente;
};
// atributos
Nodo * ultimo;
};
#endif
Mirando manuales y demás he logrado implementar la primera función (no sé si estará bien):
//Cola.cpp
#include <cstdlib>
#include "Cola.hpp"
Cola::Cola()
{
Cola c1;
c1.ultimo=NULL;
}
Cola::~Cola()
{
}
A partir de ahí, estoy rallado pues para borrar una cola antes creaba un puntero auxiliar que fuese recorriendo la cola y borrandose y tal.
//sin clases:
//definición:
typedef TNodoCola *TPuntero;
struct TCola
{
TPuntero frente;
TPuntero final;
};
----------------------
//implementación:
void DestruirCola(TCola &c)
{
TPuntero aux;
while (!ColaVacia(c))
{
aux = c.frente;
c.frente = c.frente->sig;
delete aux;
}
c.final = NULL;
}
Pero, ¿con clases cómo creo un puntero? En el .hpp el puntero "ultimo" aparece por arte de magia Nodo * ultimo. No se si me entiendéis...
Si no tenéis tiempo para explicarme lo básico, me conformo con que implementéis 1 o 2 funciones para tenerlas como ejemplo para implementar las demás.
Saludos.