Ngăn xếp (Stack)
Stack là gì?
Stack là cấu trúc dữ liệu hoạt động theo nguyên tắc LIFO (Last In, First Out) - phần tử vào sau cùng sẽ được lấy ra đầu tiên.
┌─────┐
│ 30 │ ← Top (đỉnh)
├─────┤
│ 20 │
├─────┤
│ 10 │ ← Bottom (đáy)
└─────┘💡
Stack giống như chồng đĩa - bạn chỉ có thể lấy đĩa trên cùng!
Các thao tác cơ bản
| Thao tác | Mô tả | Độ phức tạp |
|---|---|---|
push(x) | Thêm x vào đỉnh | O(1) |
pop() | Lấy và xóa phần tử đỉnh | O(1) |
peek()/top() | Xem phần tử đỉnh | O(1) |
isEmpty() | Kiểm tra stack rỗng | O(1) |
Sử dụng Stack
Python
from collections import deque
# Dùng deque (khuyên dùng)
stack = deque()
stack.append(10) # push
stack.append(20)
stack.append(30)
print(stack[-1]) # peek: 30
print(stack.pop()) # pop: 30
print(len(stack)) # size: 2Kiểm tra ngoặc hợp lệ
Python
def is_valid(s):
stack = []
mapping = {')': '(', '}': '{', ']': '['}
for char in s:
if char in mapping:
if not stack or stack.pop() != mapping[char]:
return False
else:
stack.append(char)
return len(stack) == 0
print(is_valid("()[]{}")) # True
print(is_valid("([)]")) # FalseỨng dụng thực tế
| Ứng dụng | Mô tả |
|---|---|
| Undo/Redo | Lưu trạng thái để hoàn tác |
| Browser back | Lịch sử trang đã xem |
| Call Stack | Quản lý lời gọi hàm |
| Expression eval | Tính toán biểu thức |
⚠️
Luôn kiểm tra stack có rỗng không trước khi pop() hoặc peek() để tránh lỗi!
Tiếp theo: Hàng đợi (Queue)
Last updated on