Stack (สแต็ก) เป็นโครงสร้างข้อมูลแบบ Last-In, First-Out (LIFO) ตัวที่เพิ่มเข้ามาสุดท้ายจะถูกนำออกก่อน (เหมือนจานซ้อนกัน) ตรงข้ามกับ Queue (FIFO) รองรับ 2 Operation หลัก: Push (เพิ่ม) และ Pop (นำออก)
วิธีที่ 1: ใช้ Built-in List
List ใน Python เป็น Dynamic Array รองรับ append() (Push) และ pop() (Pop) ได้อย่างมีประสิทธิภาพที่ปลาย List
Push (เพิ่มข้อมูล)
assignments = []
assignments.append("Hannah")
assignments.append("Benny")
assignments.append("Gordon")
print(assignments) # ['Hannah', 'Benny', 'Gordon']
Pop (นำข้อมูลออก)
assignments.pop() # นำ Gordon ออก print(assignments) # ['Hannah', 'Benny']
วิธีที่ 2: ใช้ collections.deque
deque (Double-Ended Queue) เป็น Doubly-Linked List มี Performance ดีและคงที่สำหรับ Insert/Delete ทั้งสองข้าง เป็นส่วนหนึ่งของ Standard Library
from collections import deque
stack = deque()
stack.append("Hannah")
stack.append("Benny")
stack.append("Gordon")
print(stack) # deque(['Hannah', 'Benny', 'Gordon'])
stack.pop()
stack.pop()
print(stack) # deque(['Hannah'])
เปรียบเทียบ List vs deque สำหรับ Stack
| ด้าน | List | deque |
|---|---|---|
| Push/Pop ที่ปลาย | O(1) Amortized | O(1) คงที่ |
| Memory Overhead | น้อยกว่า | มากกว่า (Node-based) |
| Thread Safety | ไม่ | Atomic operations (ปลอดภัยกว่า) |
| ความสะดวก | Built-in ไม่ต้อง Import | ต้อง Import |
สำหรับ Stack แบบง่าย ใช้ List เพียงพอ หากต้องการ Performance สูงสุดหรือ Thread Safety ใช้ deque
สรุป
Stack ใน Python สร้างได้ง่ายด้วย list.append()/pop() หรือ collections.deque ทั้งคู่รองรับ LIFO ครบถ้วน เลือกใช้ตามความต้องการของโปรเจกต์