Hàng đợi (Queue)
Queue là gì?
Queue là cấu trúc dữ liệu hoạt động theo nguyên tắc FIFO (First In, First Out) - phần tử vào trước sẽ được lấy ra trước.
Enqueue Dequeue
│ │
▼ ▼
┌─────┬─────┬─────┬─────┬─────┐
│ 50 │ 40 │ 30 │ 20 │ 10 │ ───▶ Ra
└─────┴─────┴─────┴─────┴─────┘
Back Front💡
Queue giống như hàng đợi mua vé - ai đến trước được phục vụ trước!
Các thao tác cơ bản
| Thao tác | Mô tả | Độ phức tạp |
|---|---|---|
enqueue(x) | Thêm x vào cuối | O(1) |
dequeue() | Lấy phần tử ở đầu | O(1) |
front()/peek() | Xem phần tử đầu | O(1) |
isEmpty() | Kiểm tra queue rỗng | O(1) |
Sử dụng Queue
Python
from collections import deque
queue = deque()
queue.append(10) # enqueue
queue.append(20)
queue.append(30)
print(queue[0]) # front: 10
print(queue.popleft()) # dequeue: 10
print(len(queue)) # size: 2⚠️
Python: Không nên dùng list.pop(0) vì có độ phức tạp O(n). Dùng deque.popleft() thay thế!
BFS với Queue
Python
from collections import deque
def bfs(graph, start):
visited = set([start])
queue = deque([start])
result = []
while queue:
node = queue.popleft()
result.append(node)
for neighbor in graph[node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append(neighbor)
return resultSo sánh Stack vs Queue
| Stack | Queue | |
|---|---|---|
| Nguyên tắc | LIFO | FIFO |
| Thêm | push (đỉnh) | enqueue (cuối) |
| Lấy | pop (đỉnh) | dequeue (đầu) |
| Duyệt đồ thị | DFS | BFS |
Tiếp theo: Bảng băm (Hash Table)
Last updated on