Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #ifndef HEAP_H
  2. #define HEAP_H
  3.  
  4.  
  5. template <typename Telem> class Heap
  6. {
  7.     public:
  8.         Heap();
  9.         virtual ~Heap();
  10.         bool agregarDat(const Telem&Elem);
  11.         bool eliminar();
  12.         const Telem&verPrimero()const;
  13.         bool arrVacio()const;
  14.     private:
  15.         void organizar();
  16.         void ordenaheap(int i);
  17.         Telem arreglo[12000];
  18.         int ultpos;
  19. };
  20.  
  21. #endif // HEAP_H
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28. #include "Heap.h"
  29.  
  30. template <typename Telem>
  31. Heap<Telem>::Heap()
  32. {
  33.     ultpos=0;
  34. }
  35.  
  36. template <typename Telem>
  37. Heap<Telem>::~Heap()
  38. {
  39.  
  40. }
  41. template <typename Telem>
  42. bool Heap<Telem>::agregarDat(const Telem&Elem)
  43. {
  44.     arreglo[ultpos]=Elem;
  45.     organizar();
  46.     ultpos++;
  47.     return true;
  48. }
  49. template <typename Telem>
  50. bool Heap<Telem>::eliminar()
  51. {
  52.     if (!arrVacio())
  53.     {
  54.         arreglo[0]= arreglo[ultpos];
  55.         arreglo[ultpos]=0;
  56.         ultpos--;
  57.         organizar();
  58.         return true;
  59.     }
  60.     else
  61.         return false;
  62.  
  63. }
  64. template <typename Telem>
  65. const Telem&Heap<Telem>::verPrimero()const
  66. {
  67.     if(!arrVacio())
  68.         return arreglo[0];
  69. }
  70. template <typename Telem>
  71. bool Heap<Telem>::arrVacio()const
  72. {
  73.     if (arreglo[0]==0)
  74.         return true;
  75.     else
  76.         return false;
  77. }
  78. template <typename Telem>
  79. void Heap<Telem>::ordenaheap(int i)
  80. {
  81.     int mayor=i;
  82.     int izq=2*i+1;
  83.     int der=2*i+2;
  84.     if ((izq < ultpos) && (arreglo[izq] > arreglo[mayor]))
  85.         mayor=izq;
  86.     if ((der < ultpos) && (arreglo[der] > arreglo[mayor]))
  87.         mayor=der;
  88.     if (mayor!=i)
  89.     {
  90.         Telem aux;
  91.         aux=arreglo[i];
  92.         arreglo[i]=arreglo[mayor];
  93.         arreglo[mayor]=aux;
  94.         ordenaheap(i);
  95.     }
  96. }
  97. template <typename Telem>
  98. void Heap<Telem>::organizar()
  99. {
  100.     for(int i=ultpos/2-1;i>=0;i--)
  101.         ordenaheap(i);
  102. }
  103.  
  104. template class Heap <int>;
  105. template class Heap <float>;
  106. template class Heap <double>;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement