Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Beginner Web en 14 Octubre 2018, 00:19 am



Título: colas
Publicado por: Beginner Web en 14 Octubre 2018, 00:19 am
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
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. const int MAX=12;
  7. typedef int tcola[MAX];
  8.  
  9. void init_queue(tcola &q);
  10. void push_queue(tcola &q, int nuevo);
  11. bool full_queue(tcola q);
  12. bool empty_queue(tcola q);
  13. int pop_queue(tcola &q);
  14. int top_queue(tcola q);
  15. int bottom_queue(tcola q);
  16. int elements(tcola q);
  17. int next(int indice);
  18.  
  19. int main()
  20. {
  21. int dato;
  22. tcola q;
  23. init_queue(q);
  24. while(full_queue(q)==false){
  25. cout<<"Ingrese dato: ";
  26. cin>>dato;
  27. push_queue(q,dato);
  28. }
  29. //cout<<top_queue(q)<<endl; //Sacar barras para el error
  30. cout<<bottom_queue(q)<<endl;
  31. cout<<elements(q)<<endl;
  32. while(empty_queue(q)==false){
  33. cout<<pop_queue(q);
  34. }
  35. cout<<endl;
  36. }
  37.  
  38. void init_queue(tcola &q)
  39. {
  40. q[0]=MAX-1;//Final de la cola
  41. q[1]=MAX-1;//Frente de la cola
  42. q[2]=0;//Contador de datos
  43. }
  44.  
  45. void push_queue(tcola &q, int nuevo)
  46. {
  47. if(full_queue(q)==true)
  48. cout<<"COLA LLENA"<<endl;
  49. else{
  50. q[0]=next(q[0]);
  51. q[q[0]]=nuevo;
  52. q[2]++;
  53. }
  54. }
  55.  
  56. bool full_queue(tcola q)
  57. {
  58. return q[2]==MAX-3;
  59. }
  60.  
  61. bool empty_queue(tcola q)
  62. {
  63. return q[2]==0;
  64. }
  65.  
  66. int pop_queue(tcola &q)
  67. {
  68. int aux;
  69. if(empty_queue(q)==true)
  70. aux=-1;
  71. else{
  72. q[1]=next(q[1]);
  73. aux=q[q[1]];
  74. q[2]--;
  75. }
  76. return aux;
  77. }
  78.  
  79. int top_queue(tcola q)
  80. {
  81. int aux;
  82. if(empty_queue(q)==true)
  83. aux=-1;
  84. else{
  85. q[1]=next(q[1]);//<----ERROR
  86. aux=q[q[1]];//<----ERROR (Reemplazar estas dos lineas por aux=q[next(q[1])];
  87. }
  88. return aux;
  89. }
  90.  
  91. int bottom_queue(tcola q)
  92. {
  93. int aux;
  94. if(empty_queue(q)==true)
  95. aux=-1;
  96. else{
  97. aux=q[q[0]];
  98. }
  99. return aux;
  100. }
  101.  
  102. int elements(tcola q)
  103. {
  104. return q[2];
  105. }
  106.  
  107. int next(int indice)
  108. {
  109. if(indice==MAX-1)
  110. indice=3;
  111. else
  112. indice++;
  113. return indice;
  114. }
  115.  

Ya encontre el error, estaba en el modulo de top_queue(q);  ;-)