A comprehensive collection of data structures, algorithms, and problem-solving exercises implemented in Python.
This repository serves as a practical reference for computer science fundamentals, technical interview preparation, and algorithmic problem solving. It contains implementations of common data structures, classic algorithms, and coding interview patterns frequently encountered in software engineering interviews.
Software engineering extends beyond frameworks and libraries.
Strong understanding of algorithms and data structures is essential for building scalable systems, analysing performance, and solving complex technical problems.
This repository was created to strengthen core computer science knowledge through hands-on implementation and deliberate practice.
- Data Structure Implementation
- Algorithm Design
- Time & Space Complexity Analysis
- Technical Interview Preparation
- Problem-Solving Patterns
- Clean and Maintainable Code
Implemented fundamental data structures from scratch to understand internal behaviour, performance characteristics, and trade-offs.
Applied common problem-solving approaches including recursion, dynamic programming, graph traversal, greedy algorithms, and divide-and-conquer techniques.
Evaluated solutions using Big O notation and optimised implementations for efficiency and scalability.
- Modular code organisation
- Consistent documentation
- Readable implementation patterns
- Reusable components
- Incremental testing and validation
algorithms-datastructures/
│
├── algorithms/
│ ├── sorting/
│ ├── searching/
│ ├── dynamic_programming/
│ ├── recursion/
│ ├── graph/
│ └── greedy/
│
├── data_structures/
│ ├── linked_list/
│ ├── tree/
│ ├── stack_queue/
│ ├── hash_table/
│ ├── heap/
│ └── graph/
│
├── practice_problems/
│
├── tests/
│
└── README.md
The repository includes implementations and exercises covering:
- Arrays
- Strings
- Linked Lists
- Stacks
- Queues
- Hash Tables
- Sets
- Binary Trees
- Binary Search Trees
- AVL Trees
- Tries
- Directed Graphs
- Undirected Graphs
- Weighted Graphs
- Heaps
- Priority Queues
- Disjoint Sets (Union-Find)
- Bubble Sort
- Selection Sort
- Insertion Sort
- Merge Sort
- Quick Sort
- Heap Sort
- Counting Sort
- Linear Search
- Binary Search
- Depth-First Search
- Breadth-First Search
- Memoisation
- Tabulation
- Classic optimisation problems
- BFS
- DFS
- Dijkstra's Algorithm
- A* Search
- Shortest Path Problems
- Recursion
- Backtracking
- Greedy Algorithms
- Divide & Conquer
- Bit Manipulation
- Number Theory
Through this repository I have strengthened my understanding of:
- Time Complexity Analysis
- Space Complexity Analysis
- Trade-offs between approaches
- Pattern Recognition
- Algorithm Selection
- Data Structure Selection
- Debugging Strategies
Preparation for software engineering interviews through practical implementation of commonly assessed concepts and coding challenges.
- Two Pointers
- Sliding Window
- Prefix Sums
- Traversals
- Binary Search Trees
- Tree Construction
- Lowest Common Ancestor
- Connected Components
- Cycle Detection
- Shortest Path
- Topological Sort
- Fibonacci Variants
- Knapsack Problems
- Longest Common Subsequence
- Coin Change
Clone the repository:
git clone https://github.com/harrywardy-cmd/algorithms-datastructures.git
cd algorithms-datastructuresInstall dependencies:
pip install -r requirements.txtRun individual implementations or exercises as required.
Modern software development requires more than framework knowledge.
This repository was created to build a stronger foundation in computer science fundamentals through direct implementation and experimentation. It serves as both a personal learning resource and a demonstration of ongoing commitment to improving software engineering skills.
By implementing algorithms and data structures from first principles, I have developed a deeper understanding of performance optimisation, problem solving, and the trade-offs involved in software design.
- Python 3
- Object-Oriented Programming
- Algorithm Analysis
- Data Structure Design
- Unit Testing
- Additional LeetCode solutions
- Competitive programming exercises
- Benchmarking and performance comparisons
- Visualisation tools for algorithms
- Expanded test coverage
- Advanced graph algorithms
Harry Ward