Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef HEAP_H
- #define HEAP_H
- template <typename Telem> class Heap
- {
- public:
- Heap();
- virtual ~Heap();
- bool agregarDat(const Telem&Elem);
- bool eliminar();
- const Telem&verPrimero()const;
- bool arrVacio()const;
- private:
- void organizar();
- void ordenaheap(int i);
- Telem arreglo[12000];
- int ultpos;
- };
- #endif // HEAP_H
- #include "Heap.h"
- template <typename Telem>
- Heap<Telem>::Heap()
- {
- ultpos=0;
- }
- template <typename Telem>
- Heap<Telem>::~Heap()
- {
- }
- template <typename Telem>
- bool Heap<Telem>::agregarDat(const Telem&Elem)
- {
- arreglo[ultpos]=Elem;
- organizar();
- ultpos++;
- return true;
- }
- template <typename Telem>
- bool Heap<Telem>::eliminar()
- {
- if (!arrVacio())
- {
- arreglo[0]= arreglo[ultpos];
- arreglo[ultpos]=0;
- ultpos--;
- organizar();
- return true;
- }
- else
- return false;
- }
- template <typename Telem>
- const Telem&Heap<Telem>::verPrimero()const
- {
- if(!arrVacio())
- return arreglo[0];
- }
- template <typename Telem>
- bool Heap<Telem>::arrVacio()const
- {
- if (arreglo[0]==0)
- return true;
- else
- return false;
- }
- template <typename Telem>
- void Heap<Telem>::ordenaheap(int i)
- {
- int mayor=i;
- int izq=2*i+1;
- int der=2*i+2;
- if ((izq < ultpos) && (arreglo[izq] > arreglo[mayor]))
- mayor=izq;
- if ((der < ultpos) && (arreglo[der] > arreglo[mayor]))
- mayor=der;
- if (mayor!=i)
- {
- Telem aux;
- aux=arreglo[i];
- arreglo[i]=arreglo[mayor];
- arreglo[mayor]=aux;
- ordenaheap(i);
- }
- }
- template <typename Telem>
- void Heap<Telem>::organizar()
- {
- for(int i=ultpos/2-1;i>=0;i--)
- ordenaheap(i);
- }
- template class Heap <int>;
- template class Heap <float>;
- template class Heap <double>;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement