A comprehensive, hands-on repository containing Java implementations and demonstrations of fundamental Data Structures, Classic Algorithms, and Dynamic Programming techniques.
- Overview
- Project Directory Structure
- Topics Covered
- Complexity Reference Table
- Getting Started & Prerequisites
- How to Run the Demonstrations
- Code Conventions
This repository serves as a practical, code-first tutorial and reference guide for core computer science concepts implemented in Java. Each topic contains self-contained demonstration files (demo_*.java) that illustrate operations, edge cases, traversals, and problem-solving strategies with clear step-by-step logic.
DSA-Tutorial-Java/
β
βββ DSAArrays/ # Array-based algorithms & search/sort techniques
β βββ DSABinarySearch/ # Binary search implementations
β βββ DSABubbleSort/ # Bubble sort variations
β βββ DSACountingSort/ # Counting sort implementation
β βββ DSAInsertionSort/ # Insertion sort
β βββ DSALinearSearch/ # Linear search
β βββ DSAMergeSort/ # Merge sort (divide & conquer)
β βββ DSAQuicksort/ # Quicksort (partitioning)
β βββ DSARadixSort/ # Radix sort (digit-by-digit)
β βββ DSASelectionSort/ # Selection sort
β
βββ DSALinkedLists/ # Linked list data structures and operations
β βββ DSALinkedListsTypes/ # Singly, Doubly, and Circular Linked Lists
β βββ DSALinkedListsOperations/ # Insertion, deletion, search, reversal, and traversal
β
βββ DSAStacks/ # Stack implementations (LIFO operations)
β
βββ DSAQueues/ # Queue implementations (FIFO, Circular queues)
β
βββ DSAHashTables/ # Hash-based data structures
β βββ DSAHashMaps/ # Key-value associative mapping
β βββ DSAHashSets/ # Unique value sets and collisions
β
βββ DSATrees/ # Tree data structures and algorithms
β βββ ArrayImplBinaryTrees/ # Array-backed binary tree representations
β βββ DSABinaryTrees/ # Standard pointer/node-based binary trees
β βββ DSABinarySearchTrees/ # Binary Search Trees (BST search, insertion, deletion)
β βββ DSAAVLTrees/ # Self-balancing AVL trees (rotations & balance factors)
β βββ BinaryTreeTraversal/ # Tree traversal strategies
β βββ BreadthFirstSearch/ # Level-order traversal
β βββ DepthFirstSearch/ # In-order, Pre-order, and Post-order traversals
β
βββ DSAGraphs/ # Graph representations and traversal algorithms
β βββ GraphImplClasses/ # Adjacency matrix & adjacency list representations
β βββ DSAGraphsImpl/ # Graph construction and edge modeling
β βββ DSAGraphsTraversal/ # Breadth-First Search (BFS) & Depth-First Search (DFS)
β βββ DSAGraphsCycleDetection/ # Cycle detection in directed and undirected graphs
β
βββ DSAShortestPath/ # Shortest path algorithms on graphs
β βββ DSADijkstrasAlgorithm/ # Dijkstra's Algorithm (single-source, non-negative weights)
β βββ DSABellmanFordAlgorithm/ # Bellman-Ford Algorithm (supports negative edge weights)
β
βββ DSAMinimumSpanningTree/ # Minimum Spanning Tree (MST) algorithms
β βββ DSAPrimsAlgorithm/ # Prim's algorithm (greedy vertex-based)
β βββ DSAKruskalsAlgorithm/ # Kruskal's algorithm (greedy edge-based + Disjoint Set / Union-Find)
β
βββ DSADynamicProgramming/ # Foundational dynamic programming examples
βββ DSAMemoization/ # Top-down dynamic programming with memo tables
βββ DSATabulation/ # Bottom-up dynamic programming with iterative state tables
βββ DSAKnapsackProblem/ # 0/1 Knapsack Problem (brute-force, memoization, tabulation)
βββ DSATravelingSalesmanProblem/ # Traveling Salesperson Problem (TSP) optimization
- Linear Data Structures:
- Arrays: Fixed-size contiguous memory blocks, sub-array partitioning, searching, and in-place transformations.
- Linked Lists: Node-based dynamic memory structures including Singly Linked Lists, Doubly Linked Lists, and Circular Linked Lists; pointer manipulation for insertion, deletion, and search.
- Stacks: Last-In-First-Out (LIFO) structure supporting
push,pop,peek, and stack-based recursion simulation. - Queues: First-In-First-Out (FIFO) structure including standard queues and circular buffers.
- Associative Structures:
- Hash Maps & Hash Sets: Key-value pair storage, hash functions, collision handling, and constant average-time lookup.
- Hierarchical & Non-Linear Structures:
- Binary Trees & BSTs: Node hierarchies, binary search properties, minimum/maximum queries, insertion, and deletion.
- AVL Trees: Self-balancing binary search trees using Balance Factor calculations and single/double rotations (LL, RR, LR, RL).
- Graphs: Directed and undirected graphs modeled via Adjacency Matrices and Adjacency Lists.
| Algorithm | Best Time | Average Time | Worst Time | Space | Characteristics |
|---|---|---|---|---|---|
| Linear Search | Sequential scan, works on unsorted collections | ||||
| Binary Search | Divide-and-conquer on sorted collections | ||||
| Bubble Sort | Simple comparison sort, stable | ||||
| Selection Sort | Repeatedly selects minimum element, unstable | ||||
| Insertion Sort | Efficient for small or nearly-sorted datasets | ||||
| Merge Sort | Divide & conquer, stable, predictable performance | ||||
| Quicksort | In-place partition-based sort, cache-friendly | ||||
| Counting Sort | Non-comparison integer sort (bounded range |
||||
| Radix Sort | Digit-by-digit distribution sort |
-
Traversals:
- Breadth-First Search (BFS): Level-order traversal using a FIFO queue; explores shortest unweighted path.
- Depth-First Search (DFS): Deep branch exploration using recursion/stack; explores topological reachability.
-
Connectivity & Cycles:
- Cycle detection in directed graphs (via recursion stack state) and undirected graphs (via visited parent tracking).
-
Shortest Paths:
- Dijkstra's Algorithm: Greedy single-source shortest path using priority cues for non-negative weighted graphs ($O((V + E) \log V)$).
- Bellman-Ford Algorithm: Dynamic relaxation algorithm capable of detecting negative weight cycles ($O(V \cdot E)$).
-
Minimum Spanning Tree (MST):
- Prim's Algorithm: Greedy vertex-addition algorithm maintaining a growing spanning tree.
- Kruskal's Algorithm: Greedy edge-addition algorithm utilizing Disjoint Set Union (Union-Find) with path compression and union by rank.
-
Core Paradigms:
- Memoization (Top-Down): Recursive exploration with cache storage for previously computed subproblems.
- Tabulation (Bottom-Up): Iterative filling of DP state tables from base cases to target state.
-
Classic Problems:
-
Fibonacci Sequence: Demonstrating progression from exponential recursion
$O(2^n)$ to linear DP$O(n)$ time. - 0/1 Knapsack Problem: Complete implementations comparing Brute-Force, Memoization, and Tabulation (including item reconstruction).
- Traveling Salesperson Problem (TSP): NP-hard combinatorial optimization explored through state-space search and DP.
-
Fibonacci Sequence: Demonstrating progression from exponential recursion
| Data Structure / Operation | Access | Search | Insertion | Deletion | Space Complexity |
|---|---|---|---|---|---|
| Array | |||||
| Stack | |||||
| Queue | |||||
| Singly Linked List | |||||
| Doubly Linked List | |||||
| Hash Table |
|
|
|
||
| Binary Search Tree |
|
|
|
|
|
| AVL Tree |
- Java Development Kit (JDK): Version 8 or higher (JDK 17+ recommended).
- IDE: IntelliJ IDEA, Eclipse, VS Code with Java extensions, or standard CLI terminal.
- Clone or open the repository folder in IntelliJ IDEA:
File -> Open -> Select "DSA-Tutorial-Java" directory - Navigate to any demo class (e.g.,
DSAArrays/DSABinarySearch/demo_binarysearch.java). - Click the green Run button next to the
mainmethod or pressShift + F10.
Compile and run individual programs from the repository root:
# Example 1: Compiling and running Binary Search
javac DSAArrays/DSABinarySearch/demo_binarysearch.java
java DSAArrays.DSABinarySearch.demo_binarysearch
# Example 2: Compiling and running Fibonacci Tabulation
javac DSATabulation/demo_findfibo_tab.java
java DSATabulation.demo_findfibo_tab
# Example 3: Compiling and running 0/1 Knapsack Tabulation
javac DSAKnapsackProblem/demo_knapsack_tabulation.java
java DSAKnapsackProblem.demo_knapsack_tabulation- File Naming: Classes and files follow the
demo_<topic_name>.javapattern for easy discovery and execution. - Packages: Folders correspond directly to Java packages matching their algorithmic domain (e.g.,
package DSATrees.DSAAVLTrees;). - Self-Contained Programs: Each demo class includes its own
mainmethod and supporting inner/helper classes for standalone execution.