A project to implement various data structures and algorithms in Python.
Project description
DSA Study
Educational implementations of common data structures and algorithms written in clean, typed, idiomatic Python.
⚠️ This project is currently under active development and is primarily intended for learning and educational purposes.
Motivation
This project started as part of my journey to build strong software engineering fundamentals.
The goal is not only to study data structures and algorithms, but also to apply software engineering practices such as:
- API design
- Type hints
- Testing
- Documentation
- Packaging
- Versioning
This repository serves both as:
- A learning project
- A reference implementation for my personal knowledge base
Project Goals
This library aims to be:
- Easy to use
- Easy to extend
- Easy to maintain
The primary objective is clarity and educational value.
Implementations are designed to clearly communicate the underlying ideas behind each data structure and algorithm.
Performance and memory optimizations are considered when they help explain the concepts (for example, path compression in Union-Find), but maximum performance is not the primary goal.
Design Principles
Data Structures Own Their Data
Data structures are responsible for storing and managing their internal state.
Examples:
LinkedList.append()BinarySearchTree.insert()Graph.add_edge()
Algorithms Are Standalone
Algorithms operate on data structures but are not part of them.
Examples:
breadth_first_search(graph)depth_first_search(graph)dijkstra(graph)topological_sort(graph)
This separation keeps data structures focused and makes algorithms reusable.
Explicit and Readable APIs
Public APIs favor clarity over brevity.
Examples:
breadth_first_search(graph)
depth_first_search(graph)
binary_search(array, target)
instead of abbreviated names.
Strong Typing
All public interfaces use Python type hints.
Pythonic Error Handling
Operations raise exceptions when invalid usage occurs rather than silently returning None.
Educational First
The code prioritizes readability and learning value.
Implementation choices should make the underlying concepts easy to understand.
Project Structure
src/
└── dsa/
├── algorithms/
├── data_structures/
└── graph/
Implemented Data Structures
Linear Structures
- Linked List
- Doubly Linked List
- Stack
- Queue
- Priority Queue
Trees
- Binary Search Tree
- Trie
Graph Structures
- Graph (Adjacency List)
Disjoint Sets
- Union-Find
Implemented Algorithms
Graph Algorithms
- Breadth-First Search (BFS)
- Depth-First Search (DFS)
- Topological Sort (Kahn)
- Topological Sort (DFS)
- Dijkstra
- Prim
- Kruskal
Sorting Algorithms
- Bubble Sort
- Selection Sort
- Insertion Sort
- Merge Sort
- Quick Sort
- Heap Sort
Searching Algorithms
- Binary Search
Testing Philosophy
Every implementation should include tests covering:
- Happy path scenarios
- Edge cases
- Empty inputs
- Invalid inputs
Usage
Installation from source:
git clone https://github.com/pablohernandezdo/dsa-study-library.git
cd dsa-study-library
uv sync
Example:
from dsa.data_structures.linked_list import LinkedList
ll = LinkedList([1, 2, 3])
ll.insert_front(0) # [0, 1, 2, 3]
ll.insert_back(4) # [0, 1, 2, 3, 4]
ll.find(3) # 3
ll.delete(2) # [0, 1, 3, 4]
Future Work
Type System
- Learn generic types (
TypeVar,Generic) - Make data structures generic
Graphs
- Additional graph representations
- Weighted graph abstractions
Algorithms
- Dynamic Programming
- Greedy Algorithms
- Backtracking
- String Algorithms
Tooling
- Automated testing with GitHub Actions
- PyPI publication
- API documentation generation
Versioning
This project follows Semantic Versioning.
Releases are tracked through:
pyproject.toml- Git tags
- GitHub releases
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dsa_study-0.2.0.tar.gz.
File metadata
- Download URL: dsa_study-0.2.0.tar.gz
- Upload date:
- Size: 19.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2cd58f2b188088b515c96542cb20536ffd085ecf10b7fa7187d31423e9619684
|
|
| MD5 |
66f493ceba503addfc1ed9150d6b9168
|
|
| BLAKE2b-256 |
dbb7a14547253168043a0b8761208d1e1ac809a95ec2f468a96d5a87d88a51b4
|
File details
Details for the file dsa_study-0.2.0-py3-none-any.whl.
File metadata
- Download URL: dsa_study-0.2.0-py3-none-any.whl
- Upload date:
- Size: 5.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.16
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac7aaa48155460620670cd563f27269ec03a476c572b816cae0973a21198a660
|
|
| MD5 |
5a3934d6f6456b96d22b289783c4f7d1
|
|
| BLAKE2b-256 |
d9ef960e25eead969163bccbdb89d175b2a69d9f9088581a13ee051e42cbd2c0
|