Hàng đợi (Queue)
Hàng đợi (queue) là cấu trúc "vào trước ra trước" (FIFO) — như xếp hàng mua vé. Bạn sẽ học các thao tác của nó, một bẫy hiệu năng kinh điển trong Python, và cách cài đúng.
1. Trực quan: xếp hàng mua vé
Queue giống hàng người xếp mua vé: ai đến trước được phục vụ trước. Thêm vào cuối hàng, lấy ra ở đầu hàng. Đó là FIFO — First In, First Out.
dequeue ◀──┐ ┌──◀ enqueue
│ │
┌─────┴─┬───────┬───────┬─────┴─┐
ra ◀ │ 10 │ 20 │ 30 │ 40 │ ◀ vào
└───────┴───────┴───────┴───────┘
đầu (front) cuối (rear)
So với stack (LIFO, lấy ở đỉnh), queue lấy ở đầu — ngược đầu với nơi thêm vào.
2. Hai thao tác chính
| Thao tác | Ý nghĩa |
|---|---|
| enqueue(x) | thêm x vào cuối hàng |
| dequeue() | lấy & bỏ phần tử ở đầu hàng |
Cả hai nên là O(1) — nhưng cài sai thì không (xem mục 4).
3. Chạy debug: enqueue rồi dequeue
Bước qua để thấy FIFO: phần tử vào trước (1) ra trước.
4. Bẫy: đừng dùng list.pop(0) làm queue
Trông có vẻ list làm queue được: append để enqueue, pop(0) để dequeue. NHƯNG pop(0) phải
dịch toàn bộ mảng → O(n) mỗi lần! Cài đúng dùng collections.deque (O(1) hai đầu):
Quy tắc: queue trong Python → luôn dùng
deque, không dùnglist.pop(0).
5. Vì sao queue quan trọng?
Queue mô hình hoá "xử lý theo thứ tự đến" — công bằng, đúng tuần tự. Ứng dụng: BFS (duyệt đồ thị theo lớp — sẽ học ở Trụ 3), hàng đợi tác vụ, hàng đợi in, xử lý yêu cầu máy chủ, bộ đệm. Nếu stack gắn với DFS/đệ quy, thì queue gắn với BFS.
6. Mẫu nhận diện
- "Xử lý theo thứ tự đến", "lần lượt", "theo lớp/tầng" → queue (FIFO).
- Duyệt đồ thị/cây theo lớp → BFS → dùng queue.
- Trong Python, cần queue →
from collections import deque.
7. 🎮 Trò chơi: Hiểu queue
8. Quiz kiểm tra nhanh
9. Hoàn thành
…☑️ Tiếp theo: 2.3.3 — Deque & bộ đệm vòng.