Overview of Key Data Structures

Sep 1, 2024

Lecture Notes: Data Structures Overview

Introduction to Data Structures

  • Definition: A data structure is a way of organizing data for efficient use.
  • Importance: Essential for creating fast algorithms, managing data, and improving code readability.
  • Key Insight: Understanding and applying the appropriate data structure is crucial for programming excellence.

Abstract Data Types vs Data Structures

  • Abstract Data Type (ADT): Defines a data type purely by its behavior (methods) without implementation details.
    • Example: Different modes of transportation (walking, biking) represent ADTs, while specific implementations (like using arrays or linked lists) represent data structures.

Computational Complexity

  • Big O Notation: Used to describe time and space complexity in algorithms, focusing on worst-case scenarios.
  • Common Complexities:
    • Constant Time: O(1)
    • Logarithmic: O(log n)
    • Linear: O(n)
    • Quadratic: O(n^2)
    • Exponential: O(2^n)

Arrays

  • Definition: A collection of items stored at contiguous memory locations.
  • Operations:
    • Access Time: O(1)
    • Search Time: O(n)
    • Insertion/Deletion: O(n) (for static arrays)
  • Dynamic Arrays: Can grow and shrink in size, allowing for more efficient use of memory.

Linked Lists

  • Definition: A linear data structure where elements (nodes) are stored in non-contiguous locations.
  • Types:
    • Singly Linked List: Nodes have a pointer to the next node.
    • Doubly Linked List: Nodes have pointers to both next and previous nodes.
  • Operations:
    • Access/Search Time: O(n)
    • Insertion/Deletion: O(1) (if you have a reference to the node).

Stacks

  • Definition: A Last-In-First-Out (LIFO) data structure.
  • Operations:
    • Push: Add an item to the top.
    • Pop: Remove the top item.
  • Use Cases: Backtracking algorithms, undo functionality in applications.

Queues

  • Definition: A First-In-First-Out (FIFO) data structure.
  • Operations:
    • Enqueue: Add an item to the back.
    • Dequeue: Remove an item from the front.
  • Use Cases: Order processing, scheduling algorithms.

Priority Queues

  • Definition: A data structure where each element has a priority. Elements with higher priority are dequeued before those with lower priority.
  • Implementation: Often implemented with heaps.
  • Operations:
    • Insert (with priority): O(log n)
    • Remove (highest priority): O(log n)

Trees

  • Definition: A hierarchical data structure with nodes connected by edges.
  • Binary Trees: Each node has at most two children.
  • Binary Search Trees (BST): A binary tree where the left child contains nodes with values less than the parent, and the right child contains values greater than the parent.
  • Balancing: Keeping trees balanced (such as AVL trees) ensures efficient operations.

Hash Tables

  • Definition: A data structure that maps keys to values using a hash function.
  • Collision Resolution Techniques:
    • Separate Chaining: Uses linked lists for entries with the same hash index.
    • Open Addressing: Finds another slot within the table itself.
  • Operations:
    • Insert: O(1) average case, O(n) worst case
    • Search: O(1) average case, O(n) worst case

Suffix Arrays

  • Definition: An array of indices representing suffixes of a string sorted in lexicographical order.
  • Use: Efficiently solving problems around substrings, such as longest repeated substrings.
  • LCP Array: Longest Common Prefix array, which tracks how many characters two adjacent suffixes have in common.

Conclusion

  • Understanding various data structures is foundational for computer science.
  • The correct application of data structures leads to efficient algorithms and better program performance.