🏗️ 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:
- You put the last slice on top
- When eating, you eat from the top slice first
- 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
Bài này phải bookmark lại, giờ em đi phỏng vấn xin việc 🥹
Stack overflow đúng là nỗi kinh hoàng của dev mà 😰
Ví dụ bánh mì quá chuẩn, dễ hiểu nhất từ trước đến giờ 🍞
Thanks bác! Lần đầu em hiểu rõ call stack là gì
Bài viết hay quá! Em hiểu stack ngay lần đọc đầu tiên 😄