DataStructures and Algorithms in C/C++

This code is written by Amit Bansal while learning Data structures and algorithms. References GFG, NPTEL, CLRS.

This repository contains:

Singly Linked List.

        Add Two Numbers Represented By Linked List.
        Bubble Sort in Linked List
        Merge Sort in Linked List
        Merge Sorted Linked List
        Reverse a singly Linked List with or without using stack

Doubly Linked List.

Circular Linked List.

        Sorted Insert

Stack using array and Linked List.

Queue using array and Linked List.

Priority Queue.

Sorting:

        Bubble Sort
        Heap Sort
        Insertion Sort
        Merge Sort
        Quick Sort
        Selection Sort

Binary Search Tree

        Insertion
        Deletion
        Preorder traversal
        Inorder traversal
        Postorder traversal
        Level order traversal
        Find Height of a Binary Search Tree
        Check if a Tree is Binary Search Tree or not(2 methods)
        Find Max and Min element in Binary Search Tree

AVL trees

        a.Insertion
        b.Deletion

Red Black Trees

        Insertion
        Deletion

Tries

        Insert
        Delete
        Search

Graphs

        Breadth First Search
        Depth Search Search
        Kosaraju's algorithm for strongly connected components
        Dijkstra's algorithm for single source shortest paths
        A* Search Algorithm
        Kruskal’s Minimum Spanning Tree Algorithm
        Topological Sorting
        Prims algorithm for minimum spanning tree using STL
        Floyd Warshall Algorithm for all pairs shortest paths
        Bellmanford algorithm for single source shortest path and negative edge cycle detection
        Detect a cycle using DFS
        Sortest Paths using Breadth First Search
        Check if an undirected Graph is eulerian.
        Find diameter of a tree using BFS
        Check if a graph is Bipartite using BFS
        Longest path in a directed acyclic graph

Flow Networks

        Ford-Fulkerson Algorithm for Maximum Flow

Greedy Algorithms

        Activity Selection Problem.
        Kruskal’s Minimum Spanning Tree Algorithm
        Dijkstra's algorithm for single source shortest paths
        Minimize Lateness problem
        Huffman Coding

Dynamic Programming

        Boolean Parenthesization Problem
        Edit Distance
        Knapsack problem with repetitions
        Knapsack Problem
        Longest Increasing Subsequence
        Maximum Value Contiguous Subsequence
        Optimal Strategy for a Game
        Optimal binary search trees
        RNA Secondary structure
        Rod Cutting
        Balanced Partition
        Box stacking
        Building Bridges
        Fibonnaci Numbers
        Longest increasing subsequence
        Maximum Value Contiguous Subsequence
        Subset Sum Problem
        Coin Changing Problem

Backtracking

        Alphacode: All possible codes that an integer string can generate
        String Permutation Algorithm
        Find Power Set of a set

Segment Tree

        Range Minimum Query
        Range Sum Query