johnreypet@lio.com

Hi, I'm John Rey Petalio - a Web Developer, App Developer, and Visual Artist. I love playing Chess, and I'm currently learning Guitar and Video Editing. I love this song Padayon, and i love watching this movieS Inception, The Social Network, Interstellar and this animated movie Zootopia.

Operating Systems

My Projects

    KonektCons

    Building the future of On-demand Skilled Work

    A&A Mini Mart

    Full-stack e-commerce web application

    John Rey's Art Desktop project thumbnail - Interactive visual art portfolio

    John Rey's Art Desktop

    Interactive visual art portfolio

    Sorsogon Treasures

    Mobile tourism app for discovering Sorsogon's hidden gems and local attractions


Certificates

    Cyber Threat Management

    Cyber Threat Management

    (Cisco)

    Intro to Cybersecurity

    Intro to Cybersecurity

    (Cisco)

    Academic Achiever Certificate

    Academic Achiever Certificate

    (CCDI)

    Certificate of Academic Excellence

    Certificate of Academic Excellence

    (JNHS)

Back to Blog
Tutorial

Data Structures Changed How I Think About Problems

June 4, 2022
8 min read
#datastructures#algorithms#problemsolving

The Course That Rewired My Brain

Starting my second year with Data Structures and Algorithms was like learning to see the Matrix. Suddenly, every programming problem had patterns, and every pattern had an optimal solution. This wasn't just about memorizing lists and trees—it was about fundamentally changing how I approach problem-solving.

My "Inefficient Code" Awakening

Before this course, I was proud of a program that found the maximum number in an array. It worked! But then our professor showed us the time complexity:

❌ My Original "Solution"

// O(n²) - Terrible!
for (int i = 0; i < array.length; i++) {
    boolean isMax = true;
    for (int j = 0; j < array.length; j++) {
        if (array[j] > array[i]) {
            isMax = false;
        }
    }
    if (isMax) return array[i];
}

Time Complexity: O(n²) - Gets exponentially slower with larger datasets

✅ The Efficient Solution

// O(n) - Much better!
int max = array[0];
for (int i = 1; i < array.length; i++) {
    if (array[i] > max) {
        max = array[i];
    }
}
return max;

Time Complexity: O(n) - Scales linearly with dataset size

The Building Blocks That Changed Everything

Arrays and Lists: The Foundation

I thought I understood arrays from Programming 1, but I was wrong. Learning about dynamic arrays, memory allocation, and when to use arrays vs. linked lists opened my eyes to performance considerations.

When to Use Arrays

  • Fixed size, known in advance
  • Need fast random access
  • Memory efficiency is crucial

When to Use Linked Lists

  • Dynamic size requirements
  • Frequent insertions/deletions
  • Memory is fragmented

Stacks and Queues: Order Matters

These weren't just abstract concepts—they solved real problems:

  • Stack (LIFO): Perfect for undo operations, function calls, expression evaluation
  • Queue (FIFO): Ideal for task scheduling, breadth-first search, handling requests

Trees: Hierarchical Thinking

Binary trees blew my mind. The idea that you could cut your search space in half with each comparison was revolutionary:

🎯 Binary Search Tree Magic

Finding an item in 1 million sorted records: Linear search = 1,000,000 steps (worst case). Binary search = 20 steps (worst case)!

Algorithms: The Problem-Solving Patterns

Sorting Algorithms

Learning different sorting algorithms taught me that there's rarely just one solution to a problem:

  • Bubble Sort: Simple to understand, terrible for large datasets
  • Quick Sort: Fast on average, but can be slow in worst case
  • Merge Sort: Consistent performance, but uses more memory

Searching Algorithms

Beyond just finding things, I learned about different types of searches:

  • Linear Search: Simple but slow
  • Binary Search: Fast but requires sorted data
  • Hash Tables: Nearly instant lookup with good hash functions

Real-World Application: My Student Management System

For our final project, I built a student management system that put these concepts into practice:

The Challenge

Manage 10,000+ student records with fast search, insertion, and deletion capabilities.

My Solution Strategy

Data Structure Choice

Hash table for O(1) student ID lookups, balanced BST for sorted name searches

Search Strategy

Multiple indexes for different search criteria (ID, name, grade level)

Memory Management

Dynamic arrays that resize efficiently to minimize memory waste

The Mindset Shift

This course changed how I approach every programming problem:

Before Data Structures

  • "Does it work?" was my only question
  • I wrote code first, optimized later (if at all)
  • I chose data structures randomly

After Data Structures

  • "What's the time and space complexity?" became automatic
  • I design the algorithm before writing code
  • I choose data structures based on access patterns
"Premature optimization is the root of all evil, but knowing your options is the root of all good decisions."

Big O Notation: The Universal Language

Learning Big O notation was like learning a universal language for discussing algorithm efficiency:

Good Complexity

  • O(1) - Constant time
  • O(log n) - Logarithmic
  • O(n) - Linear

Problematic Complexity

  • O(n²) - Quadratic
  • O(2ⁿ) - Exponential
  • O(n!) - Factorial

Practical Lessons for Future Projects

  1. Understand your data: How much? How often accessed? Growth patterns?
  2. Profile before optimizing: Measure where the actual bottlenecks are
  3. Consider trade-offs: Time vs. space, simplicity vs. performance
  4. Start simple: Optimize only when you have evidence of problems

Impact on Later Courses

The problem-solving mindset from this course became invaluable in:

  • Database design: Choosing the right indexes and query strategies
  • Web development: Optimizing frontend performance and API responses
  • System architecture: Designing scalable solutions

Advice for Current Students

💡 Study Tips

  • Visualize everything: Draw the data structures, trace through algorithms
  • Implement from scratch: Don't just use built-in libraries
  • Analyze real systems: How does Google search work? How does Instagram store photos?
  • Practice coding interviews: These concepts are heavily tested

Looking Forward

Data Structures and Algorithms didn't just teach me about programming—it taught me how to think systematically about problems. Every complex challenge can be broken down into smaller pieces, and every piece has an optimal solution waiting to be discovered.

This foundation became crucial for everything that followed: web development, database optimization, system design, and even my capstone project. When you understand how data flows and transforms, you can build anything.

What did you think of this post?

I'd love to hear your thoughts and experiences. Have you had similar experiences in your IT journey? What courses or concepts changed how you think about technology?

Read More Posts