Advertisement
Guest User

Untitled

a guest
Mar 18th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class MinHeap{
  6.     private:
  7.         int array[16];
  8.         int size;
  9.        
  10.     public:
  11.        
  12.         MinHeap(){
  13.             size = -1;
  14.         }
  15.        
  16.         bool isEmpty(){
  17.             return size < 0;
  18.         }
  19.        
  20.         void insert(int x){
  21.             try{
  22.                 if(size == 16){
  23.                     throw x;
  24.                 }else{
  25.                     size++;
  26.                     array[size] = x;
  27.                     siftUp(size);
  28.                 }
  29.             }catch(int y){
  30.                 cout << "Heap Overflow\n";
  31.             }
  32.         }
  33.        
  34.         int remove(){
  35.             int x;
  36.             try{
  37.                 if(isEmpty)
  38.                 throw x;
  39.                 else{  
  40.                     x = array[0];
  41.                     array[0] = array[size];
  42.                     size--;
  43.                     siftDown(0);   
  44.                 }
  45.             }catch(int y){
  46.                 cout << "Heap Underflow\n";
  47.                 return 0;
  48.             }
  49.         }
  50.        
  51.         void siftUp(int i){
  52.             if(i == 0){
  53.                 return;
  54.             }
  55.             if(array[i] > array[getParent(i)]){
  56.                 return;
  57.             }else{
  58.                 int x = array[getParent(i)];
  59.                 array[getParent(i)] = array[i];
  60.                 array[i] = x;
  61.                 siftUp(getParent(i));
  62.             }
  63.         }
  64.        
  65.         void siftDown(int i){
  66.             if(i  >= 8){
  67.                 return;
  68.             }
  69.             int x = cmpChildren(i);
  70.             int y;
  71.             if(x > array[i]){
  72.                 y = array[i];
  73.                 array[i] = array[x];
  74.                 array[x] = y;
  75.                 siftDown(x);
  76.             }else
  77.             return;
  78.         }
  79.        
  80.         int getParent(int i){return (i-1)/2;}
  81.        
  82.         int getLeft(int i){return (i*2) + 1;}
  83.        
  84.         int getRight(int i){return (i*2) + 2;}
  85.        
  86.         int cmpChildren(int i){
  87.             if(array[getLeft(i)] < array[getRight(i)])
  88.             return getLeft(i);
  89.             else
  90.             return getRight(i);
  91.         }
  92. };
  93.  
  94.  
  95. int main() {
  96.     return 0;
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement