ayuda cola circular

Iniciado por edo908458, 31 Marzo 2016, 01:58 AM

0 Miembros y 1 Visitante están viendo este tema.

edo908458

ok tengo este problema:
tengo que hacer una cola circular y por ahora llevo esto:

Código (cpp) [Seleccionar]
#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!

LaiaxanIV

#1
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?