You are on page 1of 5

AIR UNIVERSITY,

ISLAMABAD

Department of Creative
Technologies

Name : Ali Anwar


Roll no : 211969|BSSE-3A
COURSE : Data Structure and Algorithm
Submitted to : Sir Adnan Aslam

Software Engineering

Assignment#03
Create a Heap (Max & MIN) using Complete Binary Search Tree

Deliverables: C++ Code

Note:
10 Marks: Perform Three Operation on It.
1. Extract Max Value from (Min Heap & Max Heap)
2. Remove Highest Priority element from Heap (Max & Min)

Source Code:

#include <iostream>
using namespace std;

void swap(int *a, int *b)


{
int temp = *a;
*a = *b;
*b = temp;
}

void heapify(int arr[], int &N, int i)


{
int largest = i;
int l = 2 * i + 1;
int r = 2 * i + 2;

if (l < N && arr[l] > arr[largest])


largest = l;

if (r < N && arr[r] > arr[largest])


largest = r;

if (largest != i) {
swap(arr[i], arr[largest]);
heapify(arr, N, largest);
}
}

void MinHeapify(int arr[], int &N, int i)


{
int smallest = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if (l < N && arr[l] < arr[smallest])
smallest = l;

if (r < N && arr[r] < arr[smallest])


smallest = r;

if (smallest != i) {
swap(arr[i], arr[smallest]);
MinHeapify(arr, N, smallest);
}
}

void MaxHeap(int arr[], int &N)


{

int startIdx = (N / 2) - 1;

for (int i = startIdx; i >= 0; i--) {


heapify(arr, N, i);
}
}

void MinHeap(int arr[], int &N)


{

int startIdx = (N / 2) - 1;

for (int i = startIdx; i >= 0; i--) {


MinHeapify(arr, N, i);
}
}

void deleteNode(int arr[], int& N)


{
int lastElement = arr[N - 1];

arr[0] = lastElement;

N=N-1;

heapify(arr, N, 0);
}

void printHeap(int arr[], int &N)


{
for (int i = 0; i < N; ++i)
cout << arr[i] << " ";
cout << "\n";
}

int peekMax(int arr[])


{
return arr[0];
}

//ExtractMax from Min Heap


int peekMin(int arr[], int &N)
{
return arr[N-1];
}

int main()
{
int arr[] = {4,6,7,2,1,4};
int N = sizeof(arr)/sizeof(arr[0]);

cout<<"The MinHeap is: \n";


MinHeap(arr, N);
printHeap(arr,N);
cout<<"ExtractMax: "<<peekMin(arr,N)<<endl;
cout<<"\n Removing highest priority element from Heap: \n";
deleteNode(arr,N);
printHeap(arr,N);

cout<<"MaxHeap: \n";
MaxHeap(arr,N);
printHeap(arr, N);
cout<<"Removing highest priority element from Heap: \n";
deleteNode(arr, N);
printHeap(arr,N);
cout<<"ExtractMax: "<<peekMax(arr);

return 0;
}
Output:

You might also like