Skip to main content
0

Stack และ Queue ทำความเข้าใจเกี่ยวกับมัน และมันต่างกันยังไงนะ

สารจากนักเขียน

ถ้าพูดถึง 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 ไปเลย !!
เข้าใช้งานระบบ DevLab ฟรี !เรียนรู้เพิ่มเติม

เรียนรู้ไอที “อัพสกิลเขียนโปรแกรม” จากตัวจริง
ปั้นให้คุณเป็น คนสายไอทีระดับมืออาชีพ

5

แนะนำสำหรับคุณ

Close Menu

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

    ประเภทของคุกกี้ที่มีความจำเป็นในการใช้งานเพื่อการวิเคราะห์ และ นำเสนอโปรโมชัน สินค้า รวมถึงหลักสูตรฟรี และ สิทธิพิเศษต่าง ๆ คุณสามารถเลือกปิดคุกกี้ประเภทนี้ได้โดยไม่ส่งผลต่อการทำงานหลัก เว้นแต่การนำเสนอโปรโมชันที่อาจไม่ตรงกับความต้องการ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า