List Python có thể dùng làm Stack (LIFO) và Queue (FIFO) nhờ các method built-in.
Stack - Last In First Out
- Push:
list.append(item)- O(1) - Pop:
list.pop()- O(1) - Peek:
list[-1]- O(1) - Empty check:
not stackhoặclen(stack) == 0
stack = []
stack.append(1)
stack.append(2)
stack.append(3)
print("Stack:", stack) # [1, 2, 3]
print("Pop:", stack.pop()) # 3
print("Peek:", stack[-1]) # 2
print("Stack:", stack) # [1, 2]
Queue - First In First Out
- Enqueue:
list.append(item)- O(1) - Dequeue:
list.pop(0)- O(n) (dịch chuyển tất cả phần tử!) - Peek:
list[0]
# List as Queue - KHÔNG KHUYẾN NGHỊ cho data lớn
queue = []
queue.append(5)
queue.append(6)
queue.append(9)
print("Dequeue:", queue.pop(0)) # 5 - O(n)!
print("Queue:", queue) # [6, 9]
Queue hiệu năng cao: collections.deque
from collections import deque
queue = deque()
queue.append(5) # Enqueue right
queue.append(6)
queue.append(9)
print("Dequeue:", queue.popleft()) # 5 - O(1)!
print("Queue:", queue) # deque([6, 9])
So sánh hiệu năng
| Operation | List | deque |
|---|---|---|
| append (push/enqueue) | O(1) | O(1) |
| pop() (stack pop) | O(1) | O(1) |
| pop(0) (queue dequeue) | O(n) | O(1) |
| popleft() | N/A | O(1) |
Kết luận
- Stack: List Python hoàn hảo (
append/popđều O(1)). - Queue: KHÔNG dùng list (pop(0) O(n)). Bắt buộc dùng
collections.dequecho O(1)兩 đầu.