hola, miren tengo q representar una cola de datos mediante un arreglo, donde las primeras tres posiciones son para los 2 indices y un contador de elementos, este contador de elementos me sirve para saber si la cola esta llena o vacia, todo anda perfecto, pero cuando hago una llamada a top_que(cola); me modifica en algo mi metodo pop_queue(cola);
Supongamos no llamo en ningun momento a top_queue(cola) y pongo datos de entrada
1 2 3 4 5 6 7 8 9
Muestra por pantalla
Final cola: 9;
Cantidad elementos: 9;
1 2 3 4 5 6 7 8 9;//Mientras cola no vacia cout<<pop_queue(cola);
Y suponiendo que yo antes de vaciar la cola hubiese llamado a top_queue(cola); me sale esto
Frente cola:1;
Final cola:9;
Cantidad de elementos: 9;
234567891// Y esto es lo que me esta volviendo loca
Aqui el codigo
#include <iostream>
#include <stdlib.h>
using namespace std;
const int MAX=12;
typedef int tcola[MAX];
void init_queue(tcola &q);
void push_queue(tcola &q, int nuevo);
bool full_queue(tcola q);
bool empty_queue(tcola q);
int pop_queue(tcola &q);
int top_queue(tcola q);
int bottom_queue(tcola q);
int elements(tcola q);
int next(int indice);
int main()
{
int dato;
tcola q;
init_queue(q);
while(full_queue(q)==false){
cout<<"Ingrese dato: ";
cin>>dato;
push_queue(q,dato);
}
//cout<<top_queue(q)<<endl; //Sacar barras para el error
cout<<bottom_queue(q)<<endl;
cout<<elements(q)<<endl;
while(empty_queue(q)==false){
cout<<pop_queue(q);
}
cout<<endl;
}
void init_queue(tcola &q)
{
q[0]=MAX-1;//Final de la cola
q[1]=MAX-1;//Frente de la cola
q[2]=0;//Contador de datos
}
void push_queue(tcola &q, int nuevo)
{
if(full_queue(q)==true)
cout<<"COLA LLENA"<<endl;
else{
q[0]=next(q[0]);
q[q[0]]=nuevo;
q[2]++;
}
}
bool full_queue(tcola q)
{
return q[2]==MAX-3;
}
bool empty_queue(tcola q)
{
return q[2]==0;
}
int pop_queue(tcola &q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
q[1]=next(q[1]);
aux=q[q[1]];
q[2]--;
}
return aux;
}
int top_queue(tcola q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
q[1]=next(q[1]);//<----ERROR
aux=q[q[1]];//<----ERROR (Reemplazar estas dos lineas por aux=q[next(q[1])];
}
return aux;
}
int bottom_queue(tcola q)
{
int aux;
if(empty_queue(q)==true)
aux=-1;
else{
aux=q[q[0]];
}
return aux;
}
int elements(tcola q)
{
return q[2];
}
int next(int indice)
{
if(indice==MAX-1)
indice=3;
else
indice++;
return indice;
}
Ya encontre el error, estaba en el modulo de top_queue(q);