บทนำ
Stack และ Queue เป็น Non-Primitive Data Structures (โครงสร้างข้อมูลที่ไม่ใช่ชนิดพื้นฐาน) ทั้งคู่จัดเก็บข้อมูลแบบลำดับแต่มีหลักการทำงานต่างกันอย่างสิ้นเชิง
ตารางเปรียบเทียบ Stack และ Queue
| ลำดับ | หัวข้อ | Stack | Queue |
|---|---|---|---|
| 1 | หลักการทำงาน (Internal Implementation) | LIFO (Last In First Out) - ตัวที่เข้าไปทีหลังจะออกก่อน | FIFO (First In First Out) - ตัวที่เข้าไปก่อนจะออกก่อน |
| 2 | จุดทำงาน (Target Element) | ทำงานที่ ปลายเดียว (Top) เท่านั้น | Insert ที่ Rear (ท้าย) Delete ที่ Front (หน้า) |
| 3 | Flag/Pointer ที่ใช้ | ใช้ 1 Pointer (Top) ชี้ไปยังตัวบนสุด | ใช้ 2 Pointers (Front, Rear) ชี้หน้าและท้าย |
| 4 | ชื่อ Operations | Push (เพิ่ม), Pop (ลบ) | Enqueue (เพิ่ม), Dequeue (ลบ) |
| 5 | รูปแบบเวรเชียว (Variants) | ไม่มี Variant หลัก (มีแค่ Stack ธรรมดา) | มีหลายรูปแบบ: Circular Queue, Priority Queue, Deque (Double-ended Queue) |
| 6 | ความซับซ้อน (Complexity) | เรียบง่ายกว่า | ซับซ้อนกว่า (เพราะมี 2 จุดทำงานและหลาย Variant) |
การประยุกต์ใช้จริง
Stack ใช้เมื่อ:
- Function Call Stack (Recursion)
- Undo/Redo ใน Editor
- Expression Evaluation (Postfix/Prefix)
- Backtracking Algorithms
- Browser History (Back button)
Queue ใช้เมื่อ:
- Process Scheduling (OS)
- BFS (Breadth-First Search)
- Print Queue / Task Queue
- Message Queue (RabbitMQ, Kafka)
- Buffer ใน Streaming
สรุป
Stack = LIFO (เหมือนจานซ้อนกัน) ใช้ตอนต้องการ "ย้อนกลับ"
Queue = FIFO (เหมือนคิว排队) ใช้ตอนต้องการ "ลำดับที่มาก่อนได้ก่อน"
เลือกใช้ตามลักษณะปัญหาที่ต้องแก้