colas

Iniciado por Beginner Web, 14 Octubre 2018, 00:19 AM

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

Beginner Web

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