Advertisement
davidcastrosalinas

20201117 Ejercicio de aplicación de Stack+Colas+Heap (por completar)

Nov 17th, 2020 (edited)
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.34 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. /**####CLASE STACK  ****/
  6. #include <stack>
  7. template <class Tipo>
  8. class Stack : private stack<Tipo> {
  9. public:
  10.     void push(Tipo _valor) {
  11.         stack<Tipo>::push(_valor);
  12.     }
  13.  
  14.     Tipo pop() {
  15.         Tipo temp = stack<Tipo>::top();
  16.         stack<Tipo>::pop();
  17.         return temp;
  18.     }
  19.  
  20.     bool empty () {
  21.         return stack<Tipo>::empty();
  22.     }
  23. };
  24.  
  25. /**
  26. * Crearemos la clase Cola a partir de la librería QUEUE de C++
  27. */
  28. #include <queue>
  29. template <class Tipo>
  30. class Cola : private queue<Tipo> {
  31. public:
  32.     Tipo extraer(){
  33.         Tipo valor = this->front();
  34.         this->pop();
  35.         return valor;
  36.     }
  37.  
  38.     void agregar(Tipo valor){
  39.         this->push(valor);
  40.     }
  41.  
  42.     bool vacia(){
  43.         return this->empty();
  44.     }
  45. };
  46.  
  47. /************************************************************/
  48. #ifndef HEAPTEMPLATE_H
  49. #define HEAPTEMPLATE_H
  50.  
  51. #include <queue>
  52. template <class T> class Heap {
  53. public:
  54.     Heap() {};
  55.     virtual ~Heap() {};
  56.  
  57.     void agregar(T dato, int prioridad) {
  58.         ParPrioridadDato par;
  59.         par.first = prioridad;
  60.         par.second= dato;
  61.         h2.push(par);
  62.     };
  63.  
  64.     T extraer(){
  65.         ParPrioridadDato par = h2.top();
  66.         h2.pop();
  67.         return par.second;
  68.     }
  69.  
  70.     bool vacia() {
  71.         return h2.empty();
  72.     }
  73.  
  74. private:
  75.     typedef std::pair<int, T> ParPrioridadDato; // Prioridad, orden
  76.  
  77.     class ComparePrioridad {
  78.         public:
  79.             bool operator() (ParPrioridadDato a, ParPrioridadDato b) {
  80.                 return a.first > b.first;
  81.             }
  82.     };
  83.     std::priority_queue<ParPrioridadDato, std::vector<ParPrioridadDato>, ComparePrioridad> h2;
  84. };
  85.  
  86.  
  87. #endif // HEAPTEMPLATE_H
  88.  
  89.  
  90.  
  91.  
  92.  
  93. /***********************************************************************************************/
  94.  
  95. /**
  96. Caso: Tienda de calcetines “La esquina del calcetín”
  97. Mi suega tiene una tienda de calcetines de marca, pero no solo tiene calcetines (textura),
  98. sino que también tiene boxer(tamaño: s m l xl), pañuelos (motivo), poleras(color), pijamas(largo).
  99. ** se conoce su precio, fecha de ingreso AAAAMMDD y su descripción.
  100. Los productos vienen en cajas y se puede sacar primero el último que ingresaron a la caja.
  101. Se necesita organizar los calcetines por fecha de ingreso, para que los más antiguos sean
  102. los primeros en ofrecerse a los clientes.
  103. >>mostrar y dejar en una estructura en que el primero en llegar es el primero en salir
  104. Llega un cliente difícil y pide ver el calcetín más caro y el más económico.
  105. >>retornar esos calcetines al cliente y mostrar la información.
  106.  
  107. La tienda tiene una bodega estrecha y larga, por lo que los productos se deberán ir
  108. ingresando en este orden: calcetines, poleras boxer.
  109. >>la bodega puede almacenar todo tipo de productos.
  110. Finalmente necesito conocer el total de dinero que tengo al sumar todos los productos
  111. almacenados en la bodega.
  112. **/
  113.  
  114. class Ropa{
  115. public:
  116.     Ropa(){};
  117.     Ropa(int p,int f, string d):precio(p), fecha(f), descripcion(d) {
  118.     };
  119.  
  120.     int getFecha(){
  121.         return fecha;
  122.     }
  123.  
  124.     int getPrecio(){
  125.         return precio;
  126.     }
  127. protected:
  128.     int precio;
  129.     int fecha;
  130.     string descripcion;
  131. };
  132.  
  133. class Calcetin: public Ropa{
  134. public:
  135.     Calcetin(){};
  136.     Calcetin(int p, int f, string d, string text): Ropa(p,f,d), textura(text) {
  137.     };
  138.  
  139.     void verCalcetin(){
  140.         cout<<textura<<"$"<<precio<<"-"<<fecha<<"-"<<descripcion<<endl;
  141.     }
  142.  
  143.     string toString(){
  144.         return descripcion;
  145.     }
  146.  
  147. private:
  148.     string textura;
  149. };
  150.  
  151. class Boxers: public Ropa{
  152. public:
  153.     Boxers(){};
  154.     Boxers(int p, int f, string d, string tam): Ropa(p,f,d), tamanho(tam) {
  155.     };
  156.  
  157. private:
  158.     string tamanho;
  159. };
  160.  
  161. int main()
  162. {
  163.     //ejemplo básico de Stack
  164.     Stack<int> s;
  165.     s.push(2);
  166.     s.push(3);
  167.     while(s.empty() == false){
  168.         cout <<s.pop();
  169.     }
  170.  
  171.     //ejemplo básico de Cola
  172.     Cola<int> c;
  173.     c.agregar(2125);
  174.     c.agregar(22);
  175.     c.agregar(3323);
  176.     c.agregar(425);
  177.     cout <<endl<<"mostrando cola"<<endl;
  178.     while(!c.vacia()){
  179.         cout << c.extraer()<<endl;
  180.     }
  181.  
  182.     //ejemplo básico de Heap
  183.     cout <<endl<<"mostrando Heap"<<endl;
  184.     Heap<string> h;
  185.     h.agregar("Jorge"   , 5);
  186.     h.agregar("Jeffrey" , 3);
  187.     h.agregar("Pablo"   , 1);
  188.     h.agregar("Cristobal" , 2);
  189.     h.agregar("Samuel" , 2);
  190.     h.agregar("Tomas" , 3);
  191.     while(!h.vacia()){
  192.         cout << h.extraer()<<endl;
  193.     }
  194.  
  195.  
  196.     Stack<Calcetin> cajaCalcetines;
  197.     Calcetin calcetin1(1000,20201118,"negro con rayas blancas", "suave");
  198.     cajaCalcetines.push(calcetin1);
  199.  
  200.     Calcetin calcetin2(2000,20201117,"amarillo con puntos","suave");
  201.     cajaCalcetines.push(calcetin2);
  202.  
  203.     cajaCalcetines.push( Calcetin( 2150, 20190103, "Colegio", "Rugoso") );
  204.     cajaCalcetines.push( Calcetin( 2650, 19860113, "Empresa", "Rugoso") );
  205.  
  206.  
  207.     Heap<Calcetin> ordenador;
  208.     cout <<endl<<"Mostrando Stack"<<endl;
  209.     while(cajaCalcetines.empty() == false){
  210.         Calcetin tmp = cajaCalcetines.pop();
  211.         tmp.verCalcetin();
  212.         //agrego al la ordenador
  213.         ordenador.agregar(tmp, tmp.getPrecio());
  214.     }
  215.  
  216.     cout <<endl<<" Heap por fecha"<<endl;
  217.     while(!ordenador.vacia()){
  218.         Calcetin tmp = ordenador.extraer();
  219.         tmp.verCalcetin();
  220.     }
  221.  
  222.     return 0;
  223. }
  224.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement