Advertisement
sedran

BinaryHeap

Oct 15th, 2011
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.81 KB | None | 0 0
  1. /*
  2.  * BinaryHeap.cpp
  3.  *
  4.  *  Created on: 15 Eki 2011
  5.  *      Author: Serdar KUZUCU
  6.  */
  7.  
  8. #include <iostream>
  9. #include <math.h>
  10.  
  11. using namespace std;
  12.  
  13. template<typename Comparable>
  14. class BinaryHeap {
  15.     public:
  16.     explicit BinaryHeap( int capacity = 3 ) {
  17.         objects = new Comparable[capacity+1];
  18.         this->capacity = capacity;
  19.         this->currentsize = 0;
  20.     }
  21.  
  22.     void insert(const Comparable &o) {
  23.         if(currentsize == capacity) {
  24.             resize((capacity+1)*2);
  25.         }
  26.         int cell = ++currentsize;
  27.         for(; cell>1 && objects[cell/2] > o; cell/=2)
  28.             objects[cell] = objects[cell/2];
  29.         objects[cell] = o;
  30.     }
  31.  
  32.     void deleteMin() {
  33.         objects[1] = objects[currentsize--];
  34.         percolateDown(1);
  35.     }
  36.  
  37.     void print() {
  38.         int size = currentsize;
  39.         int numsatir = 0;
  40.         for(numsatir = 0; size>0; size-=pow(2,numsatir)+1, numsatir++);
  41.  
  42.         int citem = 1;
  43.         for(int i=0; i<=numsatir; i++) {
  44.             for(int k=numsatir-i; k>0; k--) {
  45.                 cout << " ";
  46.             }
  47.  
  48.             for(int k=0; k<pow(2,i) && currentsize>=citem; k++) {
  49.                 cout << objects[citem++] << "  ";
  50.             }
  51.             cout << endl;
  52.         }
  53.         cout << endl;
  54.     }
  55.  
  56.     bool empty() {
  57.         return (currentsize==0);
  58.     }
  59.  
  60.     private:
  61.     int currentsize;
  62.     int capacity;
  63.     Comparable *objects;
  64.  
  65.     void resize(int newcapacity) {
  66.         Comparable *newobjects = new Comparable[newcapacity];
  67.         for(int i=0; i<=currentsize; i++) {
  68.             newobjects[i] = objects[i];
  69.         }
  70.         delete(objects);
  71.         this->objects = newobjects;
  72.         capacity = newcapacity-1;
  73.     }
  74.  
  75.     void percolateDown(int hole) {
  76.         Comparable temp = objects[hole];
  77.         int child;
  78.         for( ; hole*2<=currentsize; hole = child ) {
  79.             child = hole*2;
  80.             if(child != currentsize && objects[child+1] < objects[child]) {
  81.                 child++;
  82.             }
  83.             if(objects[child] < temp) {
  84.                 objects[hole] = objects[child];
  85.             } else {
  86.                 break;
  87.             }
  88.         }
  89.         objects[hole] = temp;
  90.     }
  91. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement