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
Código
#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);