Custom Data Structures: Introduction

Let’s go over the Custom Data Structures pattern, its real-world applications, and some problems we can solve with it.

About the pattern

Although many coding problems can be solved using existing data structures like arrays, linked lists, stacks, queues, trees, and hash tables, sometimes these structures may not perfectly fit the requirements of a given problem or may not provide the desired efficiency. This is where we need custom data structures. These structures can be implemented using basic data structures as building blocks and incorporate unique features or behaviors specific to the problem domain. In easier words, a custom data structure is the modified version of an existing data structure.

For example, we have to build a web crawler. It starts with a set of seed URLs, visits each page, finds links on each page, and then follows those links to find more pages. Crawling the web means dealing with lots of pages and handling many URLs. Additionally, storing and managing these URLs efficiently while ensuring uniqueness and prioritizing certain pages (e.g., based on relevance or importance) are critical challenges. Basic data structures like arrays or hash tables might not be sufficient to handle the scale and complexity of the web. To address the challenges of this task, a custom data structure, such as a URL queue, can be designed to manage the URLs to be crawled. It is responsible for maintaining a queue of URLs to visit, ensuring uniqueness, and potentially prioritizing URLs based on various criteria.

Using custom data structures makes it easier and more efficient to solve problems that would otherwise be difficult with the existing data structures.

Each custom data structure can be effectively implemented as a class in programming languages like Python, Java, or C++. Classes facilitate abstraction, enabling users to interact with the data structure through well-defined methods and properties without needing to understand the underlying implementation details. Moreover, custom data structures represented as classes allow code reuse.

The illustration below shows some commonly used data structures that can be used to make a custom data structure: