Advertisement
davidcastrosalinas

20201023 Modificación de la clase COLA utilizando templates

Oct 22nd, 2020
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. #ifndef COLA_H
  6. #define COLA_H
  7.  
  8. template <class Tipo>
  9. class Cola {
  10.     public:
  11.         class Nodo {
  12.             public:
  13.                 Nodo(const Tipo& e, Nodo *p) : dato(e), link(p) {}
  14.                 ~Nodo() { }
  15.                 Tipo dato;
  16.                 Nodo *link;
  17.         };
  18.         Cola();
  19.         virtual ~Cola();
  20.         void agregar(Tipo e);
  21.         Tipo extraer();
  22.         bool vacia();
  23.  
  24.     private:
  25.         Nodo *mPrimero;
  26.         Nodo *mUltimo;
  27. };
  28.  
  29. #endif // COLA_H
  30.  
  31.  
  32.  
  33. //#include "Cola.h"
  34. //#define NULL 0
  35. template <class Tipo>
  36. Cola<Tipo>::Cola() : mPrimero(NULL), mUltimo(NULL) {}
  37.  
  38. template <class Tipo>
  39. Cola<Tipo>::~Cola() { }
  40.  
  41. template <class Tipo>
  42. void Cola<Tipo>::agregar(Tipo e) {
  43.     Nodo *p = new Nodo(e, NULL);
  44.     if(vacia()) {
  45.         mPrimero = p;
  46.         mUltimo = mPrimero;
  47.         return;
  48.     }
  49.     mUltimo->link = p;
  50.     mUltimo = p;
  51. }
  52.  
  53.  
  54. template <class Tipo>
  55. Tipo Cola<Tipo>::extraer() {
  56.     if(vacia())
  57.         return Tipo();
  58.  
  59.     Nodo *p = mPrimero;
  60.     Tipo e = mPrimero->dato;
  61.  
  62.     mPrimero = mPrimero->link;
  63.     delete p;
  64.     return e;
  65. }
  66.  
  67. template <class Tipo>
  68. bool Cola<Tipo>::vacia() {
  69.     return !(mPrimero);
  70. }
  71.  
  72. #include <iomanip>
  73. int main()
  74. {
  75.     Cola<int> c;
  76.     c.agregar(1);
  77.     c.agregar(2);
  78.     c.agregar(3);
  79.     while(!c.vacia())
  80.         cout << c.extraer()<<endl;
  81.  
  82.  
  83.     cout << fixed;
  84.     cout << setprecision(2); //#include <iomanip>
  85.     Cola<float> c2;
  86.     c2.agregar(1.11f);
  87.     c2.agregar(2.22f);
  88.     c2.agregar(3.33f);
  89.     while(!c2.vacia())
  90.         cout << c2.extraer()<<endl;
  91.  
  92.  
  93.     Cola<string> c3;
  94.     c3.agregar("Uno");
  95.     c3.agregar("Dos");
  96.     c3.agregar("Tres");
  97.     while(!c3.vacia())
  98.         cout << c3.extraer()<<endl;
  99.  
  100.     //vuelvo a cargar los datos
  101.     Cola<int> c6;
  102.     c6.agregar(1);
  103.     c6.agregar(2);
  104.     c6.agregar(3);
  105.  
  106.     Cola<int> c7;
  107.     c7.agregar(11);
  108.     c7.agregar(21);
  109.     c7.agregar(31);
  110.  
  111.     Cola< Cola<int> > c4;
  112.     c4.agregar(c6);
  113.     c4.agregar(c7);
  114.     while(!c4.vacia()){
  115.         Cola<int> tmp = c4.extraer();
  116.         cout <<"mostrando subCola\n";
  117.         while(!tmp.vacia())
  118.             cout << tmp.extraer()<<endl;
  119.     }
  120.  
  121.     return 0;
  122. }
  123.  
  124.  
  125.  
  126. /**
  127. clase original
  128.  
  129.  
  130. #ifndef COLA_H
  131. #define COLA_H
  132.  
  133. class Cola {
  134.     public:
  135.         class Nodo {
  136.             public:
  137.                 Nodo(const int& e, Nodo *p) : dato(e), link(p) {}
  138.                 ~Nodo() { }
  139.                 int dato;
  140.                 Nodo *link;
  141.         };
  142.         Cola();
  143.         virtual ~Cola();
  144.         void agregar(int e);
  145.         int extraer();
  146.         bool vacia();
  147.  
  148.     private:
  149.         Nodo *mPrimero;
  150.         Nodo *mUltimo;
  151. };
  152.  
  153. #endif // COLA_H
  154.  
  155.  
  156. #include "Cola.h"
  157. #define NULL 0
  158. Cola::Cola() : mPrimero(NULL), mUltimo(NULL) {}
  159. Cola::~Cola() { }
  160.  
  161. void Cola::agregar(int e) {
  162.     Nodo *p = new Nodo(e, NULL);
  163.     if(vacia()) {
  164.         mPrimero = p;
  165.         mUltimo = mPrimero;
  166.         return;
  167.     }
  168.     mUltimo->link = p;
  169.     mUltimo = p;
  170. }
  171.  
  172. int Cola::extraer() {
  173.     if(vacia())
  174.         return int();
  175.  
  176.     Nodo *p = mPrimero;
  177.     int e = mPrimero->dato;
  178.  
  179.     mPrimero = mPrimero->link;
  180.     delete p;
  181.     return e;
  182. }
  183.  
  184. bool Cola::vacia() {
  185.     return !(mPrimero);
  186. }
  187.  
  188. ***/
  189.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement