Skip to Content
🧮 CTDL & Giải thuật📚 Ngăn xếp (Stack)

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ácMô tảĐộ phức tạp
push(x)Thêm x vào đỉnhO(1)
pop()Lấy và xóa phần tử đỉnhO(1)
peek()/top()Xem phần tử đỉnhO(1)
isEmpty()Kiểm tra stack rỗngO(1)

Sử dụng Stack

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: 2

Kiểm tra ngoặc hợp lệ

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ụngMô tả
Undo/RedoLưu trạng thái để hoàn tác
Browser backLịch sử trang đã xem
Call StackQuản lý lời gọi hàm
Expression evalTí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