This repository contains a collection of labs developed between January and May 2024 as part of a course on Data Structures and Algorithms, using Python.
This repository is a comprehensive collection of projects demonstrating fundamental algorithms and data structures implemented in Python. The repository is organized into the following folders, each focusing on a specific area:
-
binary-tree-reconstruction
Purpose: Reconstruct binary trees from traversal orders (pre-order and in-order) and output the post-order traversal.
Key Concepts: Tree traversal, recursion, and binary tree construction. -
dijkstra-heap-optimization
Purpose: Optimize Dijkstra's algorithm for finding the shortest path in a weighted graph using a binary heap and HeapSort techniques (both min-heap and max-heap variants).
Key Concepts: Graph theory, priority queues, heap optimization, and shortest path algorithms. -
double-linkedlist
Purpose: Implement a double-linked list to manage collections of data (such as a LIFO stack for Book objects), demonstrating dynamic memory manipulation and efficient insertion/deletion operations.
Key Concepts: Linked lists, LIFO stacks, object-oriented programming, and dynamic data structures. -
graph-search-algorithms
Purpose: Implement classic graph search methods—Breadth-First Search (BFS) and Depth-First Search (DFS)—on graphs constructed from practical problems (e.g., maze/labyrinth solving).
Key Concepts: Graph representations (adjacency matrix and list), graph traversals, and real-world search problems. -
hash-table-collision-resolution
Purpose: Address collision handling in hash tables by implementing strategies (such as chaining) that allow efficient insertion, deletion, and searching in a hash-based data structure.
Key Concepts: Hashing, collision resolution, and data retrieval efficiency. -
recursive-algorithms
Purpose: Showcase a suite of recursive solutions to common computational problems, including sorting arrays, summing subarrays, computing the greatest common divisor, converting integers to binary, and reversing lists.
Key Concepts: Recursion, divide-and-conquer strategies, mathematical recurrences, and algorithm design.
Each folder is self-contained with its own README file that details its purpose, input/output requirements, and sample test cases. To run any of the projects:
- Navigate to the folder of interest.
- Follow the specific instructions provided in that folder’s README file.
- Run the corresponding Python file using:
python <filename>.py
Originally developed by a team of three contributors. This repository was published in 2025 for archival and reference purposes. Commit history does not reflect the original development dates.
- Santiago Botero Garcia - LePeanutButter
- Santiago Hurtado Martinez - SantiagoHM20
- Oscar Santiago Merino Suarez - OscarSantiagoMerino