-3

Stack - Cấu Trúc Dữ Liệu Kỳ Diệu Của Lập Trình Viên

đã đăng vào 4, Tháng 3, 2026, 17:36

🏗️ Stack là gì?

Chào các bạn! Hôm nay mình sẽ kể cho các bạn nghe về stack - một cấu trúc dữ liệu cực kỳ quan trọng mà bất kể lập trình viên nào cũng phải đối mặt hàng ngày.

Nói Đơn Giản Thì...

Imagine you're eating a sandwich:

  1. You put the last slice on top
  2. When eating, you eat from the top slice first
  3. The slice added last will be taken out first

That's LIFO - Last In, First Out! 🍞


🔥 Stack Trong Lập Trình

1. Call Stack - "Ngăn Xếp Gọi Hàm"

Khi bạn gọi một hàm, máy tính sẽ đẩy (push) thông tin của hàm đó vào stack. Khi hàm kết thúc, nó sẽ pop ra để trở về hàm gọi trước đó.

def a():
    b()  # đang ở đây, stack: a → b

def b():
    c()  # đang ở đây, stack: a → b → c

def c():
    print("Hello!")  # đang ở đây, stack: a → b → c
2. Undo/Redo - "Điều Kỳ Diệu Của Ctrl+Z"

Bạn có bao giờ tự hỏi tại sao Ctrl+Z có thể undo không? Stack chính là người hùng thầm lặng!

  • Mỗi lần bạn gõ một ký tự, nó được push vào undo stack
  • Mỗi lần bạn Ctrl+Z, nó pop ra và khôi phục trạng thái trước đó
3. Browser History - "Nút Back"

Khi bạn lướt web, mỗi trang bạn visit được push vào stack. Khi bạn bấm Back, nó sẽ pop ra quay về trang trước. Magic! 🌐


🎯 Tại Sao Stack Quan Trọng?

Ứng dụng Ví dụ
Function calls Recursion, call stack
Undo/Redo Word, Photoshop
Browser history Back button
Expression evaluation Calculator
Parentheses matching Compiler
DFS in graphs Path finding

💪 Bài Tập Thực Hành

Bài 1: Valid Parentheses

Cho một string chỉ chứa các ký tự (, ), {, }, [, ]. Kiểm tra xem string có hợp lệ không.

Ví dụ:

  • "()[]{}" → ✅ Valid
  • "(]" → ❌ Invalid
  • "([)]" → ❌ Invalid

Gợi ý: Dùng stack để matching!

Bài 2: Min Stack

Thiết kế một stack hỗ trợ push, pop, top, và getMin trong O(1).

Gợi ý: Dùng thêm một stack phụ để lưu minimum!


🚀 Kết Luận

Stack là một trong những cấu trúc dữ liệu quan trọng nhất mà bạn sẽ dùng rất nhiều trong lập trình. Nắm vững stack giúp bạn:

  • ✅ Hiểu rõ cách máy tính thực thi chương trình
  • ✅ Giải quyết nhiều bài toán thú vị
  • ✅ Trở thành lập trình viên tốt hơn

"Stack is not just a data structure, it's a way of thinking!"

Chúc các bạn học tốt! 💻🚀


Bình luận

Please read the guidelines before commenting.



  • 0
    Phạm Minh Triết  đã bình luận lúc 4, Tháng 3, 2026, 10:19

    Bài này phải bookmark lại, giờ em đi phỏng vấn xin việc 🥹


  • 0
    Võ Quang Trung  đã bình luận lúc 4, Tháng 3, 2026, 10:19

    Stack overflow đúng là nỗi kinh hoàng của dev mà 😰


  • 0
    Bùi Văn Tùng  đã bình luận lúc 4, Tháng 3, 2026, 10:19

    Ví dụ bánh mì quá chuẩn, dễ hiểu nhất từ trước đến giờ 🍞


  • 0
    Phan Thị Thu Trang  đã bình luận lúc 4, Tháng 3, 2026, 10:19

    Thanks bác! Lần đầu em hiểu rõ call stack là gì


  • 0
    Lê Thị Phương Thảo  đã bình luận lúc 4, Tháng 3, 2026, 10:19

    Bài viết hay quá! Em hiểu stack ngay lần đọc đầu tiên 😄