This project was created with the goal of enhancing my understanding of fundamental data structures and their implementations. Each data structure included in this project has been developed from scratch, allowing me to delve into the inner workings and gain hands-on experience.
Array - Static Array: A fixed-size array that stores elements of the same type, providing random access and constant-time element retrieval.
Vector: A dynamic array that automatically resizes itself to accommodate the number of elements inserted. It supports random access and dynamic resizing and provides a convenient interface similar to the standard library's std::vector.
LinkedList: A doubly linked list where each element, called a node, contains both data and references to the next and previous nodes. It allows efficient element insertion, deletion, and traversal in both directions.
Stack: A Last-In-First-Out (LIFO) data structure based on a linked list implementation. It supports standard stack operations such as push (insertion) and pop (removal) of elements, finding an element, swapping, and data access.
Queue: A First-In-First-Out (FIFO) data structure implemented using a linked list. It offers operations such as push (insertion) and pop (removal) of elements and functions to check if the queue is empty or retrieve the front element.
Binary Tree: A hierarchical data structure composed of nodes, where each node has at most two child nodes, referred to as the left child and right child. It enables searching, insertion, and deletion operations. Some of the methods implemented using recursion
HashTable: A data structure that uses a hash function to map keys to array indices, facilitating fast retrieval and storage of key-value pairs. It handles collisions using separate chaining and provides operations like insertion, deletion, and retrieval.
Iterator Support: To further enhance the usability and versatility of each data structure, I have implemented iterators for each one. Iterators enable easy traversal of the data structures and provide a standardized way to access and manipulate the elements they contain.
This project was primarily undertaken as a personal learning endeavor. By implementing these data structures from scratch, I aimed to deepen my understanding of their underlying concepts, design considerations, and implementation details. It has been an enriching experience, allowing me to enhance my programming skills and gain insights into the inner workings of these fundamental data structures.