Algorithms-And-Data-Structures
This repository contains a collection of projects in C++ and Python that implement various data structures and algorithms. The projects are organized by language and topic, and include detailed explanations and examples to help you understand how they work.

About
Ever since I first tackled Algorithms and Data Structures at university in 2015, I've found it super useful to regularly go back to the basics. This becomes even more important when you're trying to learn a new programming language - a strong foundation is key. To help others, I've decided to share my code and notes on the subject with everyone.
My code is written in two programming languages I really enjoy, C++ and Python. I've done my best to stick to the latest best practices. Alongside the code, you'll find the notes I made while learning. These notes give more context and could be really handy for anyone new to Algorithms and Data Structures.
Requirements
The following requirements are necessary to build and run the code in this repository:
- For C++ projects:
- A C++ compiler supporting C++14
- CMake 3.15 or later
- For Python projects:
No additional libraries or modules are required.
Running the Examples
This repository is organized into distinct algorithm implementations, each contained in its own subdirectory. These subdirectories provide the source code, unit tests, and build configuration files necessary for each algorithm. Because each algorithm forms a separate project, you should handle the build and test processes individually.
Building and Testing C++ Projects
Building and testing C++ projects involve a sequence of steps. Here's a detailed walkthrough:
-
Navigate to the project directory: Start by moving into the directory containing the specific project you want to build and test.
-
Create and navigate into the build directory:
mkdir -p build && cd build
This command creates a new directory named build (if it doesn't already exist) and then navigates into it. The build directory is where the output files of the build process will be stored.
- Generate the build files with CMake:
cmake ..
This command runs CMake to generate the build files. .. tells CMake to look for the CMakeLists.txt file in the directory above build.
- Build the project:
make
This command compiles the source code using the instructions specified in the CMakeLists.txt file.
- Run the unit tests:
ctest --verbose
The ctest --verbose command executes the unit tests and uses the verbose flag to provide a detailed output.
Testing Python Projects
To test a Python project, execute the following command in the project directory:
python -m unittest discover -v
This command uses Python's built-in unittest module to discover and run the tests. The -v (verbose) flag is used to get more detailed output from the tests.
Using the Testing Utility Script
For convenience, this repository includes a utility script named run_tests.sh. Execute the following commands from the repository's root to run tests in all subprojects:
- To run all unit tests:
./run_tests.sh
- To run all Python tests:
./run_tests.sh --python
- To run all C++ tests:
./run_tests.sh --cpp
- To read all options from terminal:
./run_tests.sh --help
Code Formatting Conventions
Consistent code formatting is essential for maintaining readability and understanding of the codebase. Therefore, we have adopted specific formatting guidelines for each programming language used in this repository.
C++ Formatting
We adhere to the Google C++ Style Guide. To automatically format the code, we use clang-format. Use the following command to format your code:
find . -regex '.*\\.(cpp|hpp|cu|c|h)' -exec clang-format -style=file -i {} \\;
This command recursively finds all files with .cpp, .hpp, .cu, .c, or .h extensions and formats them using clang-format.
CMake Formatting
CMake files should have a consistent style as well. For this, we use cmake-format. To format a CMakeLists.txt file, execute the following command:
cmake-format CMakeLists.txt -i
This command applies the cmake-format to the CMakeLists.txt file.
Python Formatting
We follow the PEP 8 - Style Guide for Python Code for Python projects and use black to automatically format the code. Use the following command to format your Python code:
black .
This command formats all Python files in the current directory and its subdirectories using black.
Notes
- Basic concepts.
- Data structures.
- Graph algorithms.
- Backtracking.
- Dynamic programming.
- Sorting.
- Brain teasers.
List of projects
Data structures
Graphs