Skip to main content

Command Palette

Search for a command to run...

DSA Week 2 - II Non-Linear Data Structures Explained: A Beginner's Guide

Updated
4 min read
DSA Week 2 - II Non-Linear Data Structures Explained: A Beginner's Guide
R

Hy this is me Ritik sharma . i am software developer

Non-Linear Data Structure

Non-linear data structures are those in which data elements are not arranged in a sequential order. Instead, they are organized in a hierarchical or interconnected manner, allowing more complex relationships among the data elements. Non-linear data structures are essential for representing relationships and hierarchies in various domains such as computer networks, databases, and artificial intelligence.

Key Non-Linear Data Structures

  1. Trees

    A tree is a hierarchical structure consisting of nodes, with one node as the root and others as its children. Each node can have zero or more child nodes.

    Characteristics:

    • Root: The topmost node.

    • Parent: A node that has child nodes.

    • Child: A node that has a parent node.

    • Leaf: A node with no children.

    • Depth: The length of the path from the root to a node.

    • Height: The length of the path from a node to the deepest leaf.

Types of Trees:

  • Binary Tree: Each node has at most two children (left and right).

  • Binary Search Tree (BST): A binary tree where the left child contains values less than the parent node, and the right child contains values greater than the parent node.

  • AVL Tree: A self-balancing binary search tree where the difference in heights of left and right subtrees is at most one.

  • Heap: A special tree-based data structure that satisfies the heap property. It can be a max heap or a min heap.

  • Trie: A tree-like data structure used to store associative data structures.

Python Example of a Binary Tree:

    class TreeNode:
        def __init__(self, value):
            self.value = value
            self.left = None
            self.right = None

    def inorder_traversal(root):
        if root:
            inorder_traversal(root.left)
            print(root.value, end=' ')
            inorder_traversal(root.right)

    # Create nodes
    root = TreeNode(1)
    root.left = TreeNode(2)
    root.right = TreeNode(3)
    root.left.left = TreeNode(4)
    root.left.right = TreeNode(5)

    # Inorder traversal
    inorder_traversal(root)  # Output: 4 2 5 1 3

  1. Graphs

    A graph is a collection of nodes (vertices) connected by edges. Graphs can represent various systems such as social networks, transportation networks, and dependency structures.

    Characteristics:

    • Vertex (Node): Fundamental unit of a graph.

    • Edge (Link): Connection between two vertices.

    • Directed Graph (Digraph): A graph where edges have a direction.

    • Undirected Graph: A graph where edges do not have a direction.

    • Weighted Graph: A graph where edges have weights representing cost, distance, or any metric.

    • Unweighted Graph: A graph where edges do not have weights.

Types of Graphs:

  • Adjacency Matrix: A 2D array where a cell represents the presence or absence of an edge between vertices.

  • Adjacency List: An array of lists where each list represents the neighbors of a vertex.

Python Example of a Graph Using Adjacency List:

    class Graph:
        def __init__(self):
            self.graph = {}

        def add_edge(self, u, v):
            if u not in self.graph:
                self.graph[u] = []
            self.graph[u].append(v)

        def print_graph(self):
            for vertex in self.graph:
                print(f"{vertex} -> {', '.join(map(str, self.graph[vertex]))}")

    g = Graph()
    g.add_edge(0, 1)
    g.add_edge(0, 2)
    g.add_edge(1, 2)
    g.add_edge(2, 0)
    g.add_edge(2, 3)
    g.add_edge(3, 3)
    g.print_graph()
    # Output:
    # 0 -> 1, 2
    # 1 -> 2
    # 2 -> 0, 3
    # 3 -> 3

Applications of Non-Linear Data Structures

  1. Trees:

    • Binary Search Trees: Used in searching and sorting algorithms, such as in databases for indexing.

    • Heaps: Used in priority queues, graph algorithms like Dijkstra's algorithm, and in heap sort.

    • Tries: Used in dictionary implementations, spell checkers, and autocomplete features.

  2. Graphs:

    • Social Networks: Representing relationships between users.

    • Transport Networks: Modeling routes and connections in transportation systems.

    • Web Crawling: Representing links between web pages.

    • Dependency Graphs: Managing project dependencies in build systems and package managers.

Understanding and efficiently utilizing non-linear data structures are crucial for solving complex problems and designing efficient algorithms in various domains.

UseCase Of This Data Structure

  • Trees:

    • Hierarchical data structure with a root and hierarchical relationships.

    • Useful in representing hierarchical data (file systems, organizational structures), implementing search algorithms (binary search trees), and balancing data (AVL trees, Red-Black trees).

  • Graphs:

    • Non-linear data structure composed of nodes and edges.

    • Used in representing networks (social networks, transportation networks), routing algorithms (shortest path), and dependency management.

These data structures cater to various computational needs, offering different trade-offs in terms of efficiency, flexibility, and ease of implementation depending on the specific use case and requirements of the application.

Data Structure And Algorithms

Part 4 of 7

Master DSA with Real-World Scenarios: This series bridges the gap between theory and practice by explaining data structures and algorithms through relatable real-life examples, making complex concepts easier to understand and apply.

Up next

Design Principles in Data Structures and Algorithms (DSA)

DRY (Don't Repeat Yourself) The DRY principle emphasizes reducing repetition within code. In DSA, this means avoiding redundant implementations of the same logic. By identifying and abstracting common patterns, functions, or algorithms into reusable ...

More from this blog

E

ENGINERING BLOG

30 posts

"Hi, I'm Ritik a commerce student with a passion for science and computers. Transitioned to software development post-high school. I focus intensely on applying learning to real-life scenarios."