Skip to main content

Data Structure

c++-basic-dsa สามารถดู video ของหัวข้อนี้ก่อนได้ ดู video

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

เราแบ่งโครงสร้างข้อมูลออกเป็นสองประเภทใหญ่ ๆ

  1. โครงสร้างข้อมูลชนิดพื้นฐาน (Primitive Data Structure) คือโครงสร้างข้อมูลหลักที่ทำงานโดยตรงกับคำสั่งระดับคอมพิวเตอร์ โดยจะใช้กับการดึงและเปลี่ยนแปลงค่าข้อมูลชนิดต่าง ๆ มีประสิทธิภาพกับข้อมูลที่มีขนาดเล็กและเรียบง่าย ตัวอย่างเช่น จำนวนเต็ม (integer) จำนวนจริง (float) ตัวอักษร (character) และตรรกะ (Boolean)
  2. โครงสร้างข้อมูลชนิดไม่ใช่พื้นฐาน (Non-Primitive Data Structure) มีความซับซ้อนมากกว่าโครงสร้างแบบพื้นฐาน และนิยมใช้เก็บข้อมูลที่มีขนาดใหญ่ที่มีลักษณะเชื่อมโยงกัน ประเภทโครงสร้างชนิดนี้แบ่งออกเป็น
    1. โครงสร้างข้อมูลเชิงเส้น (Linear Data Structure) เป็นการจัดเรียงข้อมูลในลำดับ โดยการเข้าถึงข้อมูลทำได้โดยเริ่มจากจุดแรกไล่ไปทีละลำดับตามโครงสร้าง ตัวอย่างเช่น arrays, linked lists, stacks, queues
    2. โครงสร้างข้อมูลไม่เชิงเส้น (Non-Linear Data Structure) เป็นการจัดเรียงข้อมูลอย่างไม่มีลำดับ แต่จะเน้นความสัมพันธ์แบบลำดับชั้นหรือการเชื่อมโยงที่ซับซ้อน ตัวอย่างเช่น trees, graphs

โดยนอกเหนือจากวิธีแบ่งแบบนี้ ยังมีการแบ่งออกเป็น

  • โครงสร้างข้อมูลแบบคงที่ (Static Data Structure) โครงสร้างและขนาดถูกระบุตายตัว ไม่สามารถเปลี่ยนแปลงหลังการสร้าง เช่น Array คือตัวอย่างของโครงสร้างแบบนี้
  • โครงสร้างข้อมูลแบบเปลี่ยนแปลงได้ (Dynamic Data Structure) โครงสร้างที่สามารถปรับเปลี่ยนขนาดและรูปแบบได้ระหว่างการทำงาน ตัวอย่างเช่น linked lists, trees, graphs

โดยหัวข้อต่อจากนี้เราจะพูดถึงโครงสร้างข้อมูลแบบ Non-Primitive Data Structure ที่เน้นเป็นโครงสร้างแบบ Dynamic Data Structure เพื่อให้เราสามารถเรียนรู้และทำความเข้าใจการเก็บข้อมูลแต่ละประเภทของคอมพิวเตอร์ได้

ข้อดีของการเลือกใช้โครงสร้างข้อมูลที่เหมาะสมคือช่วยพัฒนาประสิทธิภาพให้กับโปรแกรมและ algorithm ของคอมพิวเตอร์ได้อย่างมาก โครงสร้างข้อมูลถือเป็นแนวคิดพื้นฐานใน computer science เพราะเป็นกลไกที่รองรับการจัดเก็บ จัดการ และดึงข้อมูลต่าง ๆ ที่คอมพิวเตอร์ทำงานด้วย

ในหัวข้อนี้ เราจะพูดถึง Linear Data Structure กันก่อนโดยจะเน้นไปที่ 3 ตัวคือ

  1. Linked List คือชุดข้อมูลที่ถูกจัดเก็บภายในหน่วยที่เรียกว่า node โดยแต่ละ node ประกอบด้วยสองส่วนคือ ข้อมูลที่เราต้องการเก็บ และ link เชื่อมโยงไปยัง node ถัดไป
  2. Queue คือโครงสร้างข้อมูลที่มีการเพิ่มข้อมูลเข้ามาทางด้านท้าย และการดึงข้อมูลออกกระทำได้ทางด้านหน้าตามหลัก "ของเข้าก่อนออกก่อน" (First In, First Out - FIFO) เปรียบได้กับแถวเข้าคิวซื้อของที่ดึงออกไปได้ทีละคนที่อยู่คนแรกในแถวเท่านั้น
  3. Stack คือโครงสร้างข้อมูลที่มีการเพิ่มและดึงข้อมูลออก ตามหลัก "ของเข้าหลังออกก่อน" (Last In, First Out - LIFO) เปรียบได้กับการซ้อนจานที่เราจะดึงออกแต่จานล่าสุดที่เพิ่งวางซ้อนลงไปเท่านั้น