ทำความเข้าใจโครงสร้างข้อมูลพื้นฐาน หลักการทำงานของ Stack (LIFO) และ Queue (FIFO) ฉบับสมบูรณ์
เจาะลึกหลักการทำงานของโครงสร้างข้อมูล (Data Structure) พื้นฐานอย่าง Stack (LIFO) และ Queue (FIFO) พร้อมตัวอย่างการประยุกต์ใช้งานจริงในโลกการเขียนโปรแกรมที่คุณต้องรู้!
สวัสดีครับเพื่อนๆ ชาว Numsai Tech ทุกท่าน! หากคุณกำลังก้าวเข้าสู่โลกของการเขียนโปรแกรม วิทยาการคอมพิวเตอร์ หรือแม้แต่การเตรียมตัวสอบสัมภาษณ์งานตำแหน่ง Software Engineer คำว่า “โครงสร้างข้อมูล” (Data Structure) คือสิ่งที่คุณไม่สามารถหลีกเลี่ยงได้เลย โครงสร้างข้อมูลคือวิธีการจัดเก็บและจัดการข้อมูลในคอมพิวเตอร์เพื่อให้เราสามารถดึงข้อมูลออกมาใช้งานได้อย่างมีประสิทธิภาพสูงสุด
ในบทความนี้ เราจะพาคุณไปเจาะลึกโครงสร้างข้อมูลแบบเชิงเส้น (Linear Data Structure) สองประเภทที่ได้รับความนิยมและเป็นพื้นฐานที่สุด นั่นคือ Stack (สแต็ก) และ Queue (คิว) ถึงแม้ทั้งสองจะใช้เก็บข้อมูลเหมือนกัน แต่วิธีการนำข้อมูลเข้าและออกนั้นแตกต่างกันอย่างสิ้นเชิง เรามาดูกันว่าหลักการ LIFO และ FIFO คืออะไร และมีการนำไปประยุกต์ใช้อย่างไรในโลกไอทีครับ
1. เจาะลึกหลักการทำงานของ Stack (LIFO)

Stack (สแต็ก) คือโครงสร้างข้อมูลที่ทำงานภายใต้กฎที่เรียกว่า LIFO ซึ่งย่อมาจาก Last In, First Out (เข้าทีหลัง ออกก่อน)
เพื่อให้เห็นภาพที่ชัดเจนที่สุด ให้คุณนึกถึง “การซ้อนจาน” ในร้านอาหารบุฟเฟต์ เมื่อพนักงานนำจานใบใหม่มาวาง พวกเขาจะวางซ้อนทับไว้ด้านบนสุด (Last In) และเมื่อลูกค้าเดินมาหยิบจาน ลูกค้าก็จะหยิบจานใบที่อยู่บนสุดไปก่อนเสมอ (First Out) จานใบที่ถูกวางไว้ล่างสุดจะต้องรอจนกว่าจานที่อยู่ข้างบนจะถูกหยิบออกไปจนหมด ถึงจะถูกนำมาใช้งานได้
การทำงานพื้นฐานของ Stack (Core Operations)
Stack มักจะมีฟังก์ชันหลักในการจัดการข้อมูล ดังนี้
- Push การนำข้อมูลใหม่เพิ่มเข้าไปใน Stack (วางจานใบใหม่ด้านบนสุด)
- Pop การนำข้อมูลที่อยู่บนสุดออกจาก Stack (หยิบจานใบหน้าสุดออกไป)
- Peek (หรือ Top) การดูค่าของข้อมูลที่อยู่บนสุด โดยไม่ได้ลบข้อมูลนั้นออก
- isEmpty การตรวจสอบว่า Stack ว่างเปล่าหรือไม่
ตัวอย่างการประยุกต์ใช้งาน Stack ในโลกจริง (Real-World Applications)
คุณอาจจะไม่รู้ตัวว่าคุณใช้งาน Stack อยู่ทุกวันเบื้องหลังซอฟต์แวร์เหล่านี้
- ระบบ Undo/Redo ในโปรแกรม ไม่ว่าจะเป็น Microsoft Word หรือ Photoshop ทุกครั้งที่คุณพิมพ์ข้อความหรือวาดเส้น โปรแกรมจะเก็บการกระทำนั้นไว้ใน Stack เมื่อคุณกด
Ctrl+Z(Undo) โปรแกรมจะทำคำสั่ง Pop เพื่อดึงการกระทำล่าสุดออกและย้อนกลับไปสถานะก่อนหน้า - ปุ่ม Back ของ Web Browser ประวัติการเข้าชมเว็บไซต์ของคุณจะถูกเก็บแบบ Stack เมื่อคุณกดปุ่ม “ย้อนกลับ” เบราว์เซอร์จะดึงหน้าเว็บล่าสุดที่คุณเพิ่งจากมา (Top of Stack) มาแสดงผล
- Call Stack ในการทำงานของโปรแกรม ในระดับฮาร์ดแวร์และซอฟต์แวร์ เมื่อโปรแกรมเรียกใช้ฟังก์ชัน (Function Call) ระบบจะเก็บตำแหน่งของฟังก์ชันปัจจุบันไว้ใน Call Stack เพื่อให้รู้ว่าเมื่อฟังก์ชันย่อยทำงานเสร็จ จะต้องกลับไปทำงานต่อที่จุดไหน
2. ทำความเข้าใจหลักการทำงานของ Queue (FIFO)

มาต่อกันที่ Queue (คิว) โครงสร้างข้อมูลประเภทนี้ทำงานภายใต้กฎที่เรียกว่า FIFO ซึ่งย่อมาจาก First In, First Out (มาก่อน ได้ก่อน)
ตรงตามชื่อเลยครับ ให้คุณนึกถึง “การเข้าแถวซื้อตั๋วหนัง” หรือ “การเข้าคิวชำระเงินที่ซูเปอร์มาร์เก็ต” ลูกค้าที่เดินมาเข้าคิวเป็นคนแรก (First In) จะได้รับการบริการและออกจากคิวเป็นคนแรก (First Out) ส่วนคนที่มาทีหลังก็ต้องไปต่อท้ายแถวและรอจนกว่าคนที่อยู่ข้างหน้าจะทำรายการเสร็จ
การทำงานพื้นฐานของ Queue (Core Operations)
Queue มีฟังก์ชันในการจัดการข้อมูลที่สอดคล้องกับพฤติกรรมการเข้าแถว
- Enqueue การเพิ่มข้อมูลเข้าไปที่ตำแหน่งท้ายสุดของคิว (การเดินไปต่อท้ายแถว)
- Dequeue การนำข้อมูลที่อยู่หน้าสุดของคิวออกไป (ลูกค้าคนแรกได้รับบริการและเดินออกจากแถว)
- Front (หรือ Peek) การดูค่าของข้อมูลที่อยู่หน้าสุดของคิว โดยไม่ได้นำข้อมูลออก
- Rear การดูค่าของข้อมูลที่อยู่ท้ายสุดของคิว
- isEmpty การตรวจสอบว่า Queue ว่างเปล่าหรือไม่
ตัวอย่างการประยุกต์ใช้งาน Queue ในโลกจริง (Real-World Applications)
Queue ถูกนำมาใช้ในการจัดการทรัพยากรระบบที่มีจำกัด เพื่อให้เกิดความยุติธรรมและเป็นระเบียบ
- Print Spooling (คิวเครื่องพิมพ์) เมื่อมีผู้ใช้หลายคนสั่งพิมพ์งานไปยังเครื่องพิมพ์เดียวกันพร้อมๆ กัน ระบบปฏิบัติการจะเก็บคำสั่งพิมพ์เหล่านั้นลงใน Queue งานไหนถูกสั่งพิมพ์ก่อน ก็จะถูกปรินท์ออกมาก่อน
- Task Scheduling ของ CPU ระบบปฏิบัติการจะจัดคิวการทำงานของ Process ต่างๆ ที่รอประมวลผล (Ready Queue) เพื่อให้ CPU จัดสรรเวลาทำงานได้อย่างเหมาะสม
- ระบบ Call Center เมื่อคุณโทรเข้า Call Center และพนักงานให้บริการเต็มทุกสาย ระบบจะนำสายของคุณไปเข้า Queue ไว้ และจะได้คุยกับพนักงานก็ต่อเมื่อถึงคิวของคุณ (First In, First Out)
3. เปรียบเทียบความแตกต่างระหว่าง Stack และ Queue
เพื่อให้ชาว Numsai Tech สรุปความเข้าใจได้ง่ายขึ้น ลองดูตารางเปรียบเทียบนี้ครับ
| คุณสมบัติ | Stack (สแต็ก) | Queue (คิว) |
| หลักการทำงาน | LIFO (Last In, First Out) | FIFO (First In, First Out) |
| จุดที่มีการเพิ่ม/ลบ ข้อมูล | เกิดขึ้นที่ตำแหน่งเดียวกัน คือด้านบนสุด (Top) | เพิ่มข้อมูลที่ด้านหลัง (Rear) และดึงข้อมูลออกที่ด้านหน้า (Front) |
| ฟังก์ชันการเพิ่มข้อมูล | Push | Enqueue |
| ฟังก์ชันการลบข้อมูล | Pop | Dequeue |
| เปรียบเทียบกับชีวิตจริง | กองหนังสือ, การเรียงจาน, ระบบ Undo | การต่อแถวซื้อของ, คิวปรินท์เตอร์ |
| อัลกอริทึมที่ใช้ร่วมกัน | Depth-First Search (DFS) ในกราฟ | Breadth-First Search (BFS) ในกราฟ |
บทสรุป
การทำความเข้าใจโครงสร้างข้อมูล Stack และ Queue เป็นก้าวแรกที่สำคัญมากสำหรับนักพัฒนาซอฟต์แวร์ทุกคน การเลือกใช้โครงสร้างข้อมูลที่ถูกต้องไม่เพียงแต่ช่วยให้โค้ดของคุณเป็นระเบียบและอ่านง่ายขึ้น แต่ยังช่วยเพิ่มประสิทธิภาพ (Performance) ของแอปพลิเคชันอย่างมหาศาล
การเข้าใจว่าปัญหาใดควรใช้ LIFO (ต้องการข้อมูลล่าสุดก่อน) และปัญหาใดควรใช้ FIFO (ต้องการความเป็นธรรมและเป็นลำดับก่อนหลัง) คือศิลปะของการเขียนโปรแกรมที่คุณจะได้ใช้ตลอดสายอาชีพในสาย Tech นี้ครับ
หากเพื่อนๆ สนใจเนื้อหาความรู้ด้านเทคโนโลยี คอมพิวเตอร์ และการเขียนโปรแกรม อย่าลืมติดตามบทความดีๆ ได้ที่ Numsai Tech นะครับ รับรองว่ามีอัปเดตความรู้ใหม่ๆ ให้คุณพัฒนาตัวเองอยู่เสมอ!