[ Foro de C++ ]
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;
}
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.)