[ Foro de C++ ]

Problema con una estructura de cola con arreglo.

29-May-2015 14:52
Jonas Sandoval
1 Respuestas

Hola, he realizado este pequeño código, la inserción hasta ahora funciona bien, agrega el numero en el siguiente espacio, sin embargo la función de eliminar no mueve ni elimina el numero que está el frente, lo que hace es incrementar en de 1 en 1 en el último elemento.
Mi código:


#include <iostream>
#include <iomanip>
#include <stdlib.h>
#include <conio.h>
using namespace std;
/*By:Sandoval Montúfar Jonás*/
#define maxQueue 4

struct {
   int items[maxQueue];
   int front_c;
   int rear_c;
}s_cola;

//Enqueue (Agregar elemento)
void agregar(int elemento){
    s_cola.items[++s_cola.rear_c]=elemento;
}

//Dequeue (Eliminar elemento)
int eliminar(){
    return s_cola.items[s_cola.front_c++];
}

//Cola Vacía
int c_vacia(){
    if (s_cola.front_c>s_cola.rear_c)
        return 1;
    else
        return 0;
}

//Error Underflow (Subdesbordamiento)
int error_underflow(){
    if (c_vacia())
        return 1;
    else
        return 0;
}

//Cola llena
int c_llena(){
    if (s_cola.rear_c==maxQueue)
        return 1;
    else
        return 0;
}

//Error Overflow (Desbordamiento)
int error_overflow(){
    if (c_llena())
        return 1;
    else
        return 0;
}

void mostrar (){
    int i;
    cout<<"Rear-->";
    for (i = maxQueue; i>0; i--)
        cout<<s_cola.items[i]<<"-->";
    cout<<"Front";
}

int main(){
    int item=NULL,opcion;
    char opc;
    do{
    cout<<"\n\tEstructura Cola (MaxQueue="<<maxQueue<<")";
    cout<<"\nMenu\n";
    cout<<"\n1.Enqueue (Agregar)";
    cout<<"\n2.Dequeue (Eliminar)";
        if (c_vacia())
            cout<<"\n\tEstado actual: Cola vacia!";
        else if (c_llena())
            cout<<"\n\tEstado actual: Cola llena!";
        else
            cout<<"\n\tEstado actual: "<<(maxQueue)-s_cola.rear_c<<" espacios disponibles";
    cout<<"\n3.Mostrar Cola";
    cout<<"\n4.Salir";
    cout<<"\n\nSeleccione una opcion: ";
    cin>>opcion;
        switch(opcion){
        case 1:
            if (error_overflow())
                cout<<"\nError: Overflow!\n\t(La Cola ya esta llena, no se puede agregar otro elemento)\n";
            else{
            cout<<"\nIngrese el numero para agregar a la Cola"<<endl;
            cin>>item;
            agregar(item);
            mostrar ();
            }
        break;
        case 2:
            if (error_underflow())
                cout<<"\nError: Underflow!\n\t(La Cola esta vacia, no hay elemento que eliminar)\n";
            else
            item=eliminar();
            mostrar();
//                cout<<"\nEl elemento eliminado fue "<<s_cola.rear_c<<""<<endl;
        break;
        case 3:
            mostrar();
        case 4:
            exit(0);
        default:
            cout<<"\n\nNo seleccionaste una opcion, intenta de nuevo.\n"<<endl;
            getch();
            system("cls");
            return main();
        }
    cout<<"\n\nDesea continuar trabajando con la Cola?\nSi (S)/No (N)\n\n";
    cin>>opc;
    system("cls");
   }while(opc=='S' || opc=='s');
return 0;
}




29-May-2015 20:32
Nacho Cabanes (+84)

La lógica de "eliminar" es buena.

El problema está en "mostrar", que baja hasta la posición 0, no hasta la cabeza de la cola.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)