From f29dde7e452323d30f1b3df42878dd54951aee88 Mon Sep 17 00:00:00 2001 From: 17-Vicky <56847891+17-Vicky@users.noreply.github.com> Date: Tue, 22 Oct 2019 02:15:46 +0530 Subject: [PATCH 1/2] heap in C++ --- Data Structures/heap.cpp | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Data Structures/heap.cpp diff --git a/Data Structures/heap.cpp b/Data Structures/heap.cpp new file mode 100644 index 0000000..c7b6b67 --- /dev/null +++ b/Data Structures/heap.cpp @@ -0,0 +1,54 @@ + +#include + +using namespace std; + +void heapify(int arr[], int n, int i) +{ + int largest = i; // Initialize largest as root + int l = 2*i + 1; // left = 2*i + 1 + int r = 2*i + 2; // right = 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 heapSort(int arr[], int n) +{ + for (int i = n / 2 - 1; i >= 0; i--) + heapify(arr, n, i); + + for (int i=n-1; i>=0; i--) + { + swap(arr[0], arr[i]); + + // call max heapify on the reduced heap + heapify(arr, i, 0); + } +} + +void printArray(int arr[], int n) +{ + for (int i=0; i Date: Tue, 22 Oct 2019 02:21:24 +0530 Subject: [PATCH 2/2] BFS Graph --- Data Structures/braedth_first_traversal.cpp | 92 +++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 Data Structures/braedth_first_traversal.cpp diff --git a/Data Structures/braedth_first_traversal.cpp b/Data Structures/braedth_first_traversal.cpp new file mode 100644 index 0000000..6afb078 --- /dev/null +++ b/Data Structures/braedth_first_traversal.cpp @@ -0,0 +1,92 @@ +#include +#include + +using namespace std; + +// This class represents a directed graph using +// adjacency list representation +class Graph +{ + int V; // No. of vertices + + // Pointer to an array containing adjacency + // lists + list *adj; +public: + Graph(int V); // Constructor + + // function to add an edge to graph + void addEdge(int v, int w); + + // prints BFS traversal from a given source s + void BFS(int s); +}; + +Graph::Graph(int V) +{ + this->V = V; + adj = new list[V]; +} + +void Graph::addEdge(int v, int w) +{ + adj[v].push_back(w); // Add w to v’s list. +} + +void Graph::BFS(int s) +{ + // Mark all the vertices as not visited + bool *visited = new bool[V]; + for(int i = 0; i < V; i++) + visited[i] = false; + + // Create a queue for BFS + list queue; + + // Mark the current node as visited and enqueue it + visited[s] = true; + queue.push_back(s); + + // 'i' will be used to get all adjacent + // vertices of a vertex + list::iterator i; + + while(!queue.empty()) + { + // Dequeue a vertex from queue and print it + s = queue.front(); + cout << s << " "; + queue.pop_front(); + + // Get all adjacent vertices of the dequeued + // vertex s. If a adjacent has not been visited, + // then mark it visited and enqueue it + for (i = adj[s].begin(); i != adj[s].end(); ++i) + { + if (!visited[*i]) + { + visited[*i] = true; + queue.push_back(*i); + } + } + } +} + +// Driver program to test methods of graph class +int main() +{ + // Create a graph given in the above diagram + Graph g(4); + g.addEdge(0, 1); + g.addEdge(0, 2); + g.addEdge(1, 2); + g.addEdge(2, 0); + g.addEdge(2, 3); + g.addEdge(3, 3); + + cout << "Following is Breadth First Traversal " + << "(starting from vertex 2) \n"; + g.BFS(2); + + return 0; +}