Advertisement
davidcastrosalinas

Ejercicios de Colas utilizando clase Cola creada a partir de la librería Queue

Oct 30th, 2020
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.21 KB | None | 0 0
  1. #include <iostream>
  2. #include <queue> //cola
  3.  
  4. using namespace std;
  5.  
  6.  
  7. /**
  8. * Crearemos la clase Cola a partir de la librería QUEUE de C++
  9. */
  10. template <class Tipo>
  11. class Cola : private queue<Tipo> {
  12. public:
  13.     Tipo extraer(){
  14.         Tipo valor = this->front();
  15.         this->pop();
  16.         return valor;
  17.     }
  18.  
  19.     void agregar(Tipo valor){
  20.         this->push(valor);
  21.     }
  22.  
  23.     bool vacia(){
  24.         return this->empty();
  25.     }
  26. };
  27.  
  28.  
  29. /**Función para crear datos de prueba **/
  30. void crearCola(Cola<int> &c, int cantidad){
  31.     for(int i=0; i<cantidad; i++)
  32.         c.agregar(rand()%100);
  33. }
  34.  
  35. /** muestra la cola por pantalla, al terminar la cola queda vacía
  36. 1) void imprimeCola(Cola) */
  37. void imprimeCola(Cola<int> &c){
  38.     while(!c.vacia())
  39.         cout<<c.extraer()<<endl;
  40. }
  41.  
  42. /** muestra la cola por pantalla, al terminar la cola queda intacta
  43. 2) void muestraCola(Cola) */
  44. void mostrarCola(Cola<int> c){
  45.     while(!c.vacia())
  46.         cout<<c.extraer()<<endl;
  47. }
  48.  
  49. /** muestra la cola por pantalla, al terminar la cola queda intacta utilizando templates
  50. 3) void mostrarColaT(Cola<Tipo>) */
  51. template <class Tipo>
  52. void mostrarColaT(Cola<Tipo> c){
  53.     while(!c.vacia())
  54.         cout<<c.extraer()<<endl;
  55. }
  56.  
  57. /** muestra la cola por pantalla, al terminar la cola queda intacta utilizando recursividad
  58. 4) void mostrarRecursivo(Cola<Tipo>) */
  59. void mostrarRecursivo(Cola<int> c){
  60.     if(c.vacia())
  61.        return ;
  62.     cout<<c.extraer()<<endl;
  63.     mostrarRecursivo(c);
  64. }
  65.  
  66. /** muestra la cola de forma inversa por pantalla, al terminar la cola queda intacta utilizando recursividad
  67. 5) void mostrarRecursivoInverso(Cola<Tipo>) */
  68. void mostrarRecursivoInverso(Cola<int> c){
  69.     if(c.vacia())
  70.        return ;
  71.     int aux=c.extraer();
  72.     mostrarRecursivoInverso(c);
  73.     cout<<aux<<endl;
  74. }
  75.  
  76. /** contar elementos dentro de la cola
  77. 6) int contarElementosEnLaCola(Cola) **/
  78. int contarElementosEnLaCola(Cola<int> c){
  79.     int contador=0;
  80.     while(!c.vacia()){
  81.         c.extraer();
  82.         contador++;
  83.     }
  84.     return contador;
  85. }
  86.  
  87. /** sumar elementos dentro de la cola, sólo ejecutarlo con enteros
  88. 7) int sumarElementos(Cola<int>) **/
  89. int sumarElementosCola(Cola<int> c){
  90.     int suma=0;
  91.     while(!c.vacia()){
  92.         suma+=c.extraer();
  93.     }
  94.     return suma;
  95. }
  96.  
  97. /** invierte el orden de los elementos de la cola, tip: use recursividad
  98. 8) void invertirCola(Cola) */
  99. void invertirCola(Cola<int> &c){
  100.     if(c.vacia())
  101.        return ;
  102.     int aux=c.extraer();
  103.     invertirCola(c);
  104.     c.agregar(aux);
  105. }
  106.  
  107.  
  108. /** retorna la posición del elemento dentro de la cola, de no encontrarlo devuelve -1
  109. 9) bool posicionElemento(Cola<Tipo>, int)  **/
  110. int posicionElemento(Cola<int> c, int elemento){
  111.     int contador=0;
  112.     while(!c.vacia()){
  113.         contador++;
  114.         if(c.extraer() == elemento)
  115.             return contador;
  116.     }
  117.     return -1;
  118. }
  119.  
  120. /** elimina de la cola el elemento que esta en la ubicacion, los otros elementos quedan en el mismo orden
  121. 10) void eliminaElementoPorUbicacion(Cola pajar, int ubicacion) */
  122. int eliminaElementoPorUbicacion(Cola<int> c, int elemento){
  123.     int contador=0;
  124.     while(!c.vacia()){
  125.         contador++;
  126.         if(c.extraer() == elemento)
  127.             return contador;
  128.     }
  129.     return -1;
  130. }
  131.  
  132.  
  133.  
  134. /** elimina todos los elementos de la cola
  135. 11) void eliminacionCola(Cola) */
  136. void eliminacionCola(Cola<int> &c){
  137.     while(!c.vacia())
  138.         c.extraer();
  139. }
  140.  
  141. /** elimina el elemento que se encuentra en la posición indicada
  142. 12) void eliminacionPosicionX(Cola<int>, int posX) */
  143. void eliminacionPosicionX(Cola<int> &c, int posx){
  144.     int posicion=0;
  145.     Cola<int> auxiliar;
  146.     while(!c.vacia()){
  147.         posicion++;
  148.         if(posicion != posx)
  149.             auxiliar.agregar(c.extraer());
  150.         else
  151.             c.extraer();
  152.     }
  153.     while(!auxiliar.vacia())
  154.         c.agregar(auxiliar.extraer());
  155. }
  156.  
  157. /** retorne true si el elemento existe en la cola
  158. 13) void existeElemento(Cola, int) */
  159. bool existeElemento(Cola<int> c, int elemento){
  160.     while(!c.vacia()){
  161.         if(c.extraer() == elemento)
  162.             return true;
  163.     }
  164.     return false;
  165. }
  166.  
  167.  
  168. /** retornar el último elemento de la cola (usar templates)
  169. 14) Tipo ultimoElemento(Cola<Tipo>) */
  170. int ultimoElemento(Cola<int> c){
  171.     int ultimo=-1;
  172.     while(!c.vacia()){
  173.         ultimo=c.extraer();
  174.     }
  175.     return ultimo;
  176. }
  177.  
  178.  
  179.  
  180. /** copia la cola de origen a destino *
  181. 15) void copiarCola(Cola origen, Cola destino) */
  182. void copiarCola(Cola<int> &origen, Cola<int> &destino){
  183.     Cola<int> aux;
  184.     //lo guardo en una aux
  185.     while(!origen.vacia())
  186.         aux.agregar(origen.extraer());
  187.  
  188.     //colocar el dato en ambas colas
  189.     while(!aux.vacia()){
  190.         int tmp =aux.extraer();
  191.         origen.agregar(tmp);
  192.         destino.agregar(tmp);
  193.     }
  194. }
  195.  
  196.  
  197. /** copia la cola de origen a destino, pero lo hace utilizando templates *
  198. 16) void copiarCola(Cola origen, Cola destino) */
  199. template <class Tipo>
  200. void copiarColaTemplate(Cola<Tipo> &origen, Cola<Tipo> &destino){
  201.     Cola<Tipo> aux;
  202.     //lo guardo en una aux
  203.     while(!origen.vacia())
  204.         aux.agregar(origen.extraer());
  205.  
  206.     //colocar el dato en ambas colas
  207.     while(!aux.vacia()){
  208.         Tipo tmp =aux.extraer();
  209.         origen.agregar(tmp);
  210.         destino.agregar(tmp);
  211.     }
  212. }
  213.  
  214.  
  215. int main()
  216. {
  217.     Cola<int> c;
  218.     int cant=10;
  219.     crearCola(c,cant);
  220.     mostrarCola(c);
  221.     cout<<"Cantidad de elementos: "<<contarElementosEnLaCola(c)<<endl;
  222.     cout<<"La suma total es: "<<sumarElementosCola(c)<<endl;
  223.     mostrarCola(c);
  224.     cout<<"\t[MOSTRAR RECURSIVO]"<<endl;
  225.     mostrarRecursivo(c);
  226.  
  227.     cout<<"INVERSO"<<endl;
  228.     mostrarRecursivoInverso(c);
  229.  
  230.     cout<<"invertir cola"<<endl;
  231.     invertirCola(c);
  232.     mostrarCola(c);
  233.     cout<<"Posicion elemento x"<<posicionElemento(c,41)<<endl;
  234.     cout<<"Posicion elemento x"<<posicionElemento(c,100)<<endl;
  235.  
  236.     cout<<"Eliminacion"<<endl;
  237.     eliminaElementoPorUbicacion(c,1);
  238.     eliminaElementoPorUbicacion(c,1);
  239.     eliminaElementoPorUbicacion(c,1);
  240.     mostrarCola(c);
  241.  
  242.     if(existeElemento(c,34)){
  243.         cout<<"Existe"<<endl;
  244.     }else
  245.         cout<<"No existe"<<endl;
  246.  
  247.     cout<<"Ultimo elemento: "<<ultimoElemento(c);
  248.     return 0;
  249. }
  250.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement