Skip to main content
0

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

ถ้าพูดถึง 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 ฟรี !เรียนรู้เพิ่มเติม

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

BorntoDev

Author BorntoDev

BorntoDev Co., Ltd.

More posts by BorntoDev

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

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

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

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

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

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

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

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