ok tengo este problema:
tengo que hacer una cola circular y por ahora llevo esto:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
using namespace std;
class Clasecola
{
private:
int cola[10];
int cima;
int inicio;
public:
Clasecola();
void agregar(int);
void sacar();
void imprimir();
void rotar(int);
bool vacia();
bool llena();
~Clasecola();
};
Clasecola::Clasecola()
{
inicio=0;
cima=-1;
for (int i=0;i<10;i++)
{
cola[i]=0;
}
}
bool Clasecola::llena()
{
if(cima==9)
{
return 1;
}
else
{
return 0;
}
}
void Clasecola::agregar(int a)
{
if (llena()==1)
{
cout<<"La cola esta llena"<<endl;
}
else
{
cima++;
cola[cima]=a;
}
}
bool Clasecola::vacia()
{
if (cima==-1)
{
return 1;
}
else
{
return 0;
}
}
void Clasecola::sacar()
{
if (vacia()==1)
{
cout<<"La cola esta vacia"<<endl;
}
else
{
cout<<"Dato a Sacar "<<cola[inicio]<<endl;
inicio++
;
}
}
void Clasecola::rotar(int a)
{
if (llena()==1)
{
cout<<"Puesto ocupado"<<endl;
}
else
{
cima++;
cola[cima]=a;
}
}
void Clasecola::imprimir()
{
if(vacia()==1)
{
cout<<"la cola esta vacia"<<endl;
}
else
{
for(int i=inicio; i<10;i++)
{
cout<<cola[i]<<endl;
}
}
}
Clasecola::~Clasecola()
{
for(int i=0;i<10;i++)
{
cola[i]=0;
}
cima=-1;
}
int main(int argc, char *argv[])
{
Clasecola cola;
int opc=1,Dat;
do
{
cout<<"Agregar Dato------1"<<endl;
cout<<"Sacar Dato--------2"<<endl;
cout<<"Imprimir cola-----3"<<endl;
cout<<"Rotar-------------4"<<endl;
cout<<"Salir-------------5"<<endl;
cin>>(opc);
system ("cls");
switch (opc)
{
case 1:
cout<<"Dame el dato"<<endl;
cin>>Dat;
cola.agregar(Dat);
break;
case 2:
cola.sacar();
break;
case 3:
cola.imprimir();
break;
case 4:
cout<<"Agrege un dato para realizar la rotacion"<<endl;
cin>>Dat;
cola.rotar(Dat);
break;
case 5:
cout<<"Adios"<<endl;
break;
default:
cout<<"No es opcion valida"<<endl;
break;
}
}
while(opc<5);
system("PAUSE");
return EXIT_SUCCESS;
}
el programa tecnicamente corre, pero cuando le doy "sacar" el programa elmina el numero pero si excedo el limite (sacar once veces) , en vez de decirme, la cola esta vacia, comienza a lanzarme informacion basura.
y tengo este otro problema mas urgente.
nesesito ademas cuando seleccione la opcion "rotar" realice el trabajo normal de la cola circular, cualquier ayuda es bienvenida.
Mod: Los códigos deben ir en etiquetas GeSHi, ¡no escribas en mayúsculas!
que tiene que hacer exactamente que hacer el rotar? No estoy familiarizado con las colas circulares. Por otra parte, el lleno tendría que ser igualando a 10, no a 9, ya que veo que es de 10 posiciones.
Además, cuando hayas borrado y añadido muchos elementos, cima e inicio se van a salir de rango. No crees que es mejor ir moviendo los elementos de posición?