Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class MinHeap{
- private:
- int array[16];
- int size;
- public:
- MinHeap(){
- size = -1;
- }
- bool isEmpty(){
- return size < 0;
- }
- void insert(int x){
- try{
- if(size == 16){
- throw x;
- }else{
- size++;
- array[size] = x;
- siftUp(size);
- }
- }catch(int y){
- cout << "Heap Overflow\n";
- }
- }
- int remove(){
- int x;
- try{
- if(isEmpty)
- throw x;
- else{
- x = array[0];
- array[0] = array[size];
- size--;
- siftDown(0);
- }
- }catch(int y){
- cout << "Heap Underflow\n";
- return 0;
- }
- }
- void siftUp(int i){
- if(i == 0){
- return;
- }
- if(array[i] > array[getParent(i)]){
- return;
- }else{
- int x = array[getParent(i)];
- array[getParent(i)] = array[i];
- array[i] = x;
- siftUp(getParent(i));
- }
- }
- void siftDown(int i){
- if(i >= 8){
- return;
- }
- int x = cmpChildren(i);
- int y;
- if(x > array[i]){
- y = array[i];
- array[i] = array[x];
- array[x] = y;
- siftDown(x);
- }else
- return;
- }
- int getParent(int i){return (i-1)/2;}
- int getLeft(int i){return (i*2) + 1;}
- int getRight(int i){return (i*2) + 2;}
- int cmpChildren(int i){
- if(array[getLeft(i)] < array[getRight(i)])
- return getLeft(i);
- else
- return getRight(i);
- }
- };
- int main() {
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement