สารจากนักเขียน
ถ้าพูดถึง Data Structure หลาย ๆ คนก็จะต้องนึกถึง Stack และ Queue ที่เป็นโครงสร้างข้อมูลที่จะเสริมความสามารถให้กับการจัดเก็บและจัดการข้อมูลได้อย่างมีประสิทธิภาพ โดยมีคุณสมบัติและการใช้งานแตกต่างกันออกไป แล้วทั้ง 2 นี้เนี่ยอย่างมันแตกต่างกันยังไงนะ ?? ในวันนี้เราจะมาจะไขข้อสงสัยไปพร้อม ๆ กัน ไปกันนนน
เขียนโดย
Thapanon Sodngam
Junior Software Developer
บทความนี้ตีพิมพ์ และ เผยแพร่เมื่อ 26 กันยายน 2566
STACK
Stack คือ linear data structure ที่เป็นรูปแบบของการจัดเก็บข้อมูลโดยมีการจัดเรียงข้อมูลให้ต่อเนื่อง กัน และเข้าถึงข้อมูลตามลำดับ โดย Stack จะมีรูปแบบกันจัดเก็บข้อมูลในรูปแบบข้อง Last In First Out (LIFO) หรือแปลเป็นไทยง่าย ๆ เข้าไปทีหลังออกมาก่อนหรือลองมองเป็นภาพกล่องใส่ของที่เราวางลองทับลงไปเรื่อย ๆ แล้วเวลาเอาของออกก็ต้องเอาของด้านบานออกก่อนนั่นเอง
Operation พื้นฐานของ Stack
- push(): ใช้เพื่อเพิ่มข้อมูลใน Stack
- pop(): ใช้เพื่อลบข้อมูลออกจาก Stack
- isEmpty(): ใช้เพื่อตรวจสอบว่า Stack ว่างหรือไม่
- isFull(): ใช้เพื่อตรวจสอบว่า Stack เต็มหรือไม่
- peek(): return ข้อมูลที่ตำแหน่งที่ต้องการ
- count(): return จำนวนรายการทั้งหมดที่มีใน Stack
- change(): ใช้เพื่อเปลี่ยนข้อมูลที่ตำแหน่งต้องการ
- display(): ใช้เพื่อแสดงผลข้อมูลทั้งหมดที่มีใน Stack
QUEUE
Queue คือ linear data structure ที่เป็นรูปแบบของการจัดเก็บข้อมูลโดยมีการจัดเรียงข้อมูลให้ต่อเนื่องกัน โดย Queue จะมีรูปแบบกันจัดเก็บข้อมูลในรูปแบบข้อง First In First Out (FIFO) หรือมองเป็นท่อส่งของที่ปลายด้านนึงจะใช้ในการแทรกข้อมูล (Enqueue) และปลายอีกด้านนึงจะใช้เพื่อทำการนำข้อมูลออก หรือลบข้อมูล (Dequeue) โดยจะมี Pointer ที่ชี้ไปยังข้อมูลตัวหัวและท้ายของ Queue ว่า front กับ rear ตามลำดับ
- enqueue() : ใช้เพื่อเพิ่มข้อมูลใน queue
- dequeue() : ใช้เพื่อลบข้อมูลออกจาก queue
- peek() , front() : return ข้อมูลที่ตำแหน่ง front หรือตำแหน่งหน้าสุด
- rear() : return ข้อมูลที่ตำแหน่ง rear หรือตำแหน่งท้ายสุด
- isFull() : ใช้เพื่อตรวจสอบว่า Stack เต็มหรือไม่
- isEmpty() : ใช้เพื่อตรวจสอบว่า Stack ว่างหรือไม่
Stack:
- Stack ใช้ระบบ LIFO (Last-In-First-Out) ซึ่งหมายความว่าข้อมูลที่ถูกเพิ่มล่าสุดจะถูกนำออกก่อนข้อมูลที่เพิ่มมาก่อนหน้า.
- เพิ่มข้อมูลลงใน Stack เรียกว่า “Push”.
- การนำข้อมูลออกจาก Stack เรียกว่า “Pop”.
- Stack เต็มหรือไม่ Stack มี Pointer 1 ตัวที่ชี้ไปยังตัวบนสุดของ Stack เพื่อเข้าถึงข้อมูลบนสุด.
- การเพิ่มและลบข้อมูลผ่านทางเดียวก็คือตัว top นั่นเอง
- มักใช้กับงานแบบ backtracking เช่น undo/redo functionality
Queue:
- Queue ใช้ระบบ FIFO (First-In-First-Out) ซึ่งหมายความว่าข้อมูลที่ถูกเพิ่มล่าสุดจะถูกใช้งานก่อนข้อมูลที่เพิ่มมาก่อนหน้า.
- เพิ่มข้อมูลลงใน Queue เรียกว่า “Enqueue”.
- การนำข้อมูลออกจาก Queue เรียกว่า “Dequeue”.
- Queue มี Pointer 2 ตัว: ตัวหนึ่งชี้ไปที่ตัวหน้า (Front, Head) และตัวอีกตัวชี้ไปที่ตัวท้าย (Rear, Tail).
- การเพิ่มและลบข้อมูลข้อมูลคนละด้านโดยเพิ่มจะต้องนำข้อมูลไปต่อกับ rear และลบจะนำข้อมูลออกจาก front
- มักใช้กับการทำงานตามลำดับเช่น handling requests หรือ scheduling tasks.
โดยสรุปคือ Stack จัดเก็บข้อมูลแบบเรียงตามหลักการ LIFO และ Queue จัดเก็บข้อมูลแบบเรียงตามหลักการ FIFO โดยมีการเพิ่ม (Push/Enqueue) และนำออก (Pop/Dequeue) ข้อมูล และมี Pointer ที่ชี้ไปยังตำแหน่งที่สำคัญในการเข้าถึงข้อมูลในทั้งสองโครงสร้างข้อมูลนี้.
Ref1: Stack-and-Queue-Medium
Ref2: https://www.geeksforgeeks.org/difference-between-stack-and-queue-data-structures/
Ref3: https://www.javatpoint.com/data-structure-stack
Ref4: https://www.geeksforgeeks.org/introduction-to-queue-data-structure-and-algorithm-tutorials/
ระบบฝึกทักษะ การเขียนโปรแกรม
ที่พร้อมตรวจผลงานคุณ 24 ชั่วโมง
- โจทย์ปัญหากว่า 200 ข้อ ที่รอท้าทายคุณอยู่
- รองรับ 9 ภาษาโปรแกรมหลัก ไม่ว่าจะ Java, Python, C ก็เขียนได้
- ใช้งานได้ฟรี ! ครบ 20 ข้อขึ้นไป รับ Certificate ไปเลย !!