uso de una cola en una biblioteca
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]
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]