Skip to content

This repository serves as a comprehensive resource for understanding and implementing various data structures and algorithms

Notifications You must be signed in to change notification settings

Syipmong/DSA-Practice

Repository files navigation

Data Structures and Algorithms

Welcome to my Data Structures and Algorithms project! This repository serves as a comprehensive resource for understanding and implementing various data structures and algorithms. The focus, at the moment, has been on Binary Search Trees (BST), Singly LinkedList, Doubly LinkedList, Queue, Stack, and the Merge Sort algorithm with an exploration of Big O notation, emphasizing O(n) and O(log n) complexities.

Table of Contents

Binary Search Tree (BST)

Overview

A Binary Search Tree serves as the cornerstone of this project, embodying a sorted data structure with a hierarchical arrangement. Each node intricately balances its children, providing an elegant framework for efficient data retrieval.

Implementation

Iterative BST

The Iterative BST implementation in Python lays the foundation for understanding the nuanced procedures of insertion, search, and traversal within a BST. Its structure is deliberately designed for clarity and comprehensibility.

Recursive BST

The Recursive BST implementation, also in Python, delves into the inherent beauty of recursive methodologies when dealing with tree structures. The code reflects an abstraction that aligns with the intrinsic nature of recursive problem-solving.

Singly LinkedList

The Singly LinkedList implementation showcases a linear data structure where elements are linked sequentially. Operations such as insertion and traversal are explored in this section.

Doubly LinkedList

The Doubly LinkedList implementation extends the concept of linked lists by adding backward pointers. This bidirectional linkage enhances traversal and certain manipulation operations.

Queue

The Queue section introduces the basic operations of a queue, a linear data structure following the First In, First Out (FIFO) principle. Learn about enqueue, dequeue, front, isEmpty, and size operations.

Stack

The Stack section explores the Last In, First Out (LIFO) data structure. Learn about push, pop, peek, isEmpty, and size operations. Stacks are widely used in various applications, including managing function calls, parsing expressions, and undo functionality.

Merge Sort Algorithm

The Merge Sort Algorithm section introduces a divide-and-conquer approach to sorting. Learn how this algorithm efficiently sorts a list by recursively dividing it into smaller segments, sorting them, and then merging them back together.

Linear Search Algorithm

In addition to tree-based structures, this project includes a Linear Search Algorithm, showcasing the simplicity and efficiency of searching in a linear collection.

Recursion Algorithm

Explore the power of recursion in the included Recursion Algorithm. This section provides a hands-on understanding of recursive principles applied to problem-solving.

Complexity Analysis

O(n) Complexity

The Iterative BST implementation offers insights into scenarios where the tree devolves into a linear structure, resulting in an O(n) time complexity. This elucidates the importance of optimizing tree structures for better performance.

O(log n) Complexity

In contrast, the Recursive BST implementation underscores the efficiency of well-balanced trees, showcasing the coveted O(log n) time complexity in search operations. The recursive approach seamlessly aligns with the logarithmic nature of balanced binary search trees.

Next Steps

As this project unfolds, the exploration will extend beyond the confines of Binary Search Trees, Linked Lists, Queues, and Stacks. Future endeavors include delving into advanced data structures like AVL trees and navigating through algorithms that underpin essential operations such as sorting and searching. Expect continuous updates as the journey into the captivating realm of Data Structures and Algorithms continues!

Feel free to peruse the codebase, provide constructive feedback, or reach out with any queries or suggestions.

Happy coding!