uso de una cola en una biblioteca

fmoon31
29 de Mayo del 2008
hola! tengo problemas para implementar una biblioteca que se encarga del mantenimiento (consulta, ingresa, elimina) de usuarios, libros y ejemplares, lo estoy trabajando con una cola, pero mi metodo ppush nisiquiera esta funcionando como deberia,(no ingresa nada a la cola), ademas de que tengo otros metodos que no estoy segura de que sirvan , y practicamente esta es mi clase base para hacer todo lo demas, que ya temgo pero no esnada funcional debido a mi problema... si alguien puediera ayudarme se los agradeceria demasiadismo...
las pruebas que hice para ver si me estaba funcionando el push ..era imprimir en pantalla lo ultimo que ingrese a la cola o la primero cualquier posicion y me imprimia todos los datos en cero..
estoy al borde de la locura.. es mi proyecto fianl y todavia hacen falta demasiadas cosas por hacer, ademas tengo que agregarle archivos y no se como utilizarlo, y tengo que usar algo que se llama serializacion que tampoco se de que se trata(tengo una ligera idea de la toeria pero no como aplicarla).. cualquier comentario y ayuda es recibida con gusto :
esto es parte del codigo base de mi proyecto... es una cola con template a ver si me entienden un poco la idea que les menciones:
#ifndef COLA_H
#define COLA_H



template <class T>
class cola {

private:
T *data; // objeto [ data ] tipo [ T ]
int head; // posicion inicial de la cola
int tail; // posicion final de la cola
int tamano; // tamaño de la cola

public:
//constructor y destructor
cola(); // constructor
cola(int elem); // constructor sobrecargado
~cola(); // destructor

//set y get
void setTamano(int tamano); //set tamano
void setTail(int tail); //set tail
void setHead(int head); //set head
int getTamano(); //get tamano
int getTail(); //get tail
int getHead(); //get head
T getDato(int i); //get dato de data

//otros metodos
void redimensionar(); // redefinir tamano
void push(T elem); // push - ingresar valores
T pop(int i); // pop - extraer valores
bool siEstaVacia(); // si esta vacia
bool siEstaLlena(); // si esta llena
int buscar(T elem); // buscar elemento
int next(int val); // siguiente posicion



};


// METODOS DE LA CLASE COLA
//---------------------------
/* constructor
/*-------------*/
template <class T>
cola<T>::cola()
{
this->setTamano(0);
data = new T[50];
this->setHead(0);
this->setTail(0);
}

/* constructor
/*-------------*/
template <class T>
cola<T>::cola(int elem)
{
this->setTail(0);
this->setHead(0);
this->setTamano(elem);
data = new T[elem];
}

/* destructor
/*------------*/
template <class T>
cola<T>::~cola()
{
delete[] data;
}

/* set y get
/*----------*/
//set head
template <class T>
void cola<T>::setHead(int head)
{
this->head = head;
}

//set tail
template <class T>
void cola<T>::setTail(int tail)
{
this->tail = tail;
}

//set tamano
template <class T>
void cola<T>::setTamano(int tamano)
{
this->tamano = tamano;
}

//get head
template <class T>
int cola<T>::getHead()
{
return this->head;
}

//get tail
template <class T>
int cola<T>::getTail()
{
return this->tail;
}

//get tamano
template <class T>
int cola<T>::getTamano()
{
return this->tamano;
}

//get dato
template <class T>
T cola<T>::getDato(int i)
{
return this->dato[i];
}


/*redimensiona tamano
/*--------------------*/
template <class T>
void cola<T>::redimensionar()
{
const int k = (getTamano()+1);
T ** aux = new T *[k];

for(int i=0;i<k;i++)
{
aux[i] = getDato(i);
}
setTamano(k+1);
}


/* metodo push
/*-------------*/
template <class T>
void cola<T>::push(T elem)
{
if(! siEstaLlena())
data[this->getTail()] = elem;
this->setTail(next(this->getTail()));
}


/* metodo pop
/*------------*/
template <class T>
T cola<T>::pop(int i)
{
T elem;
if(! siEstaVacia()) {
if(this->getHead()!=i)
elem = data[i];
else
elem = data[getHead()];
setHead(next(getHead()));
}
return elem;
}

/* si esta vacia la cola
/*-----------------------*/
template <class T>
bool cola<T>::siEstaVacia()
{
if(getHead() == getTail())
return true;
else
return false;
}


/* si esta llena la cola
/*-----------------------*/
template <class T>
bool cola<T>::siEstaLlena()
{
return next(getTail()) != getHead();
}

/* siguiente posicion
/*--------------------*/
template <class T>
int cola<T>::next(int val)
{
if(val == getTamano())
return 0;
else
return val + 1;
}


/* BUSCA UN ELEMENTO DE LA COLA
/*------------------------------*/
template <class T>
int cola<T>::buscar(T elem)
{
for(int i=getHead(); i<getTail(); i++)
if(data[i] == elem)
return i; // Encontrado
return 0; // No encontrado
}

#endif
mi correo es [email protected]