Skip to main content
0
Data Structure & AlgorithmsJavaScriptProgramming ConceptProgramming Language

เราจะประยุกต์ใช้ Data Structure ใน JavaScript ได้อย่างไร ?

เพื่อนๆ คงเคยเรียนพื้นฐาน Data Structures กันมาคร่าวๆ บ้างแล้ว ซึ่งเราสามารถประยุกต์ใช้กับการเขียนโปรแกรมในภาษา JavaScript ได้อย่างไร เรามาหาคำตอบได้ในบทความนี้เลยจ้า

มาทำความรู้จัก Data Structures กันก่อนนะ

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

Array

เป็นโครงสร้างพื้นฐานที่ประกอบด้วยกลุ่มของข้อมูลประเภทเดียวกัน ถูกจัดเก็บไว้ด้วยกัน มีตำแหน่งติดกัน จะมี index ที่ใช้ในการเลือกข้อมูล ซึ่ง Array เป็นวิธีที่ง่ายที่สุดของการจัดเก็บข้อมูล เรามาดูตัวอย่างการใช้ Array ใน JavaScript กันดีกว่า

ตัวอย่างโค้ด JS

var Name1 = ["Too", "Pom", "Dang", "Phareena"];
var Name2 = ["Benten", "Nui", "Koi", "Eid"]

console.log(Name1.concat(Name2));     // ["Too", "Pom", "Dang", "Phareena", "Benten", "Nui", "Koi", "Eid"]
console.log(Name1.includes("Too"));   // true
console.log(Name2.reverse());         // ["Eid", "Koi", "Nui", "Benten"]
console.log(Name2.push("Tee"));       // ["Benten", "Nui", "Koi", "Eid", "Tee"]

จากโค้ดตัวอย่างเป็นการใช้ Method มาจัดการข้อมูลใน Array เช่น
concat() – ใช้เชื่อม 2 Array เข้าด้วยกัน
include() – ใช้หาข้อมูลใน Array ได้ตามต้องการ จะ return ค่าออกมาเป็น True หรือ False
reverse() – ใช้จัดเรียงข้อมูลใน Array จาก index สุดท้าย ไปยัง index แรก
push() – ใช้เพิ่มข้อมูลลงไปใน Array

Linked List

เป็นโครงสร้างข้อมูลแบบ linear (เส้นตรง) ซึ่งข้อมูลอาจจะไม่ได้อยู่ในตำแหน่งที่ติดกัน แต่มีพอยเตอร์เป็นตัวเชื่อมต่อหากัน 1 ชุดข้อมูลจะเรียกตัวเองว่า Node โดยแต่ละโหนดจะประกอบด้วย Data และ Link Field เพื่อเก็บตำแหน่งของข้อมูลชุดถัดไป ซึ่งจะเชื่อมโยงกันตังแต่ Head Node ไปจนถึง Last Node ซึ่งจะเป็น Node ที่ไม่มี Link Field ของตำแหน่งของข้อมูลในชุดถัดไป ถือว่าเป็นอันสิ้นสุด Link

Image of a linked list

👍 ข้อดีคือใช้ในการค้นหาข้อมูลและเชื่อมโยงข้อมูลได้อย่างง่ายมากขึ้น ไม่จำเป็นต้องจัดการโครงสร้างข้อมูลใหม่ทั้งหมด

👎 ข้อเสียคือหากเป็นชุดข้อมูลที่เยอะอาจจะใช้เวลาในการค้นหานาน

ตัวอย่างโค้ด JS

//สร้าง Class
class LinkedList {
   constructor(head = null) {
     this.head = head
   }
}

//กำหนด node 
let node1 = new ListNode(2)
let node2 = new ListNode(5)

//กำหนดให้ node1 ชี้ไปหา node2
node1.next = node2

//ให้ส่งค่า node1 ไปยัง class LinkedList 
let list = new LinkedList(node1)

//ผลลัพธ์จะเท่ากับ 5 ซึ่งจะทำให้รู้ว่า node 2 เป็น last node
console.log(list.head.next.data) //returns 5

ตัวอย่าง Methods JavaScript ที่ใช้สำหรับ LinkedList มีดังนี้

size() – ใช้เพื่อหาจำนวน node ใน list 

วิธีการใช้งาน

size() {
   let count = 0; 
   let node = this.head;

   while (node) {
      count++;
      node = node.next
   }
  
   return count;
}

clear() – ใช้เพื่อ clear ค่าใน list

วิธีการใช้งาน

clear() {
   this.head = null;
}

getLast() – ใช้เพื่อหาโหนดสุดท้ายใน list

วิธีการใช้งาน

getLast() {
   let lastNode = this.head;

   if (lastNode) {
       while (lastNode.next) {
           lastNode = lastNode.next
       }
   }

   return lastNode
}

getFirst() – ใช้เพื่อหาโหนดแรกใน list

วิธีการใช้งาน

getFirst() {
   return this.head;
}

Stack

เป็นโครงสร้างชุดข้อมูลเชิงเส้น มีหลักการ LIFO (Last In First Out) ซึ่งจะมี pointer เพื่อชี้ไปยังตำแหน่งข้อมูล โดยวิธีนี้จะเป็นวิธีการเพิ่มหรือลบข้อมูล โดยจะเพิ่มข้อมูลจากล่างขึ้นบน และจะลบข้อมูลจากบนลงล่าง ยกตัวอย่างเช่น การวางจานโดยเราจะวางซ้อนกันจากล่างขึ้นบน และเมื่อจะหยิบใช้เราก็จะหยิบจากจานที่อยู่ด้านบนก่อน

รู้ไหม? จานสีอะไร? ทำให้อยากกินอาหารน้อยลง

มีตัวอย่างการใช้งานดังนี้

Push – ใช้เพิ่มข้อมูลลงใน Stack
เมื่อต้องการ push ข้อมูลลงใน Stack ต้องเพิ่มในตำแหน่งบนสุดของข้อมูลเดิม และต้องกำหนดให้ข้อมูลที่ถูกเพิ่มใหม่กลายเป็นข้อมูลที่อยู่บนสุดแทน

push(element) {
   this.data[this.top] = element;
   this.top = this.top + 1;
}

Pop – ใช้ลบข้อมูลใน Stack
เมื่อต้องการลบข้อมูลใน Stack เราต้องลบจากข้อมูลที่อยู่บนสุดก่อน และต้องกำหนดให้ข้อมูลที่อยู่ล่างตำแหน่งที่ถูกลบไป กลายเป็นข้อมูลที่อยู่บนสุดแทน

pop() {
  this.top = this.top -1;
  return this.data.pop(); // removes the last element
}

ลองมาดูโค้ดเต็มๆ กันบ้าง

// สร้าง class Stack 
class Stack {
   #items = []
   push = (element) => this.#items.push(element)
   pop = () => this.#items.pop()
   size = () => this.#items.length
}

const stack = new Stack()

// เพิ่มข้อมูลลงใน stack
stack.push(1)
stack.push(2)
stack.push(3)

// จำนวนข้อมูลใน stack เท่ากับ 3
console.log(stack.size()) // => 3

// ลบ 3 ออกจาก stack เพราะเป็นข้อมูลที่อยู่บนสุด 
console.log(stack.pop()) // => 3 

// จำนวนข้อมูลเหลือ 2 เพราะถูกลบออกไปแล้ว 1
console.log(stack.size()) // => 2

Queue 

เป็นโครงสร้างข้อมูลแบบเชิงเส้น ใช้หลักการ FIFO (First In First Out) อย่างเช่นเราเข้าแถวซื้ออาหารคนแรกก็จะเป็นคิวที่ 1 ซึ่งจะได้ซื้ออาหารเป็นคนแรก และคิวก็จะรันไปเรื่อยๆ จนถึงคิวสุดท้ายนั่นเอง 

Think in English: เข้าแถว เข้าคิว ภาษาอังกฤษเรียกว่าอะไร

Enqueue – เป็นการเพิ่มข้อมูลลงในคิว โดยข้อมูลที่เพิ่มมาใหม่จะต่อท้ายข้อมูลที่อยู่ก่อนหน้า
Dequeue – เป็นการลบข้อมูล โดยจะลบจากข้อมูลที่อยู่ด้านหน้าก่อน
Peek – เป็นการหาข้อมูลที่อยู่หน้าสุด
length – เป็นการนับจำนวนข้อมูลที่อยู่ในคิว

ลองมาดูโค้ดตัวอย่างกันบ้าง

// สร้าง class Queue
class Queue {
   constructor() {
      this.items = {};
      this.headIndex = 0;
      this.tailIndex = 0;
   }

   // ฟังก์ชันเพิ่มข้อมูลลงในคิว
   enqueue(item) {
      this.items[this.tailIndex] = item;
      this.tailIndex++;
   }

   // ฟังก์ชันลบข้อมูลในคิว
   dequeue() {
      const item = this.items[this.headIndex];
      delete this.items[this.headIndex];
      this.headIndex++;
      return item;
   }

   // ฟังก์ชันหาข้อมูลที่อยู่ด้านหน้าสุด
   peek() {
      return this.items[this.headIndex];
   }

   // หาจำนวนข้อมูลที่อยู่ในคิว
   get length() {
      return this.tailIndex - this.headIndex;
   }
}

const queue = new Queue();

//เพิ่มข้อมูลลงในคิว
queue.enqueue(7);
queue.enqueue(2);
queue.enqueue(6);
queue.enqueue(4);

//ลบ 7 ออกจากคิวเพราะ 7 อยู่หน้าสุด
console.log(queue.dequeue()); // => 7

//2 กลายเป็นข้อมูลที่อยู่หน้าสุดแทน 
console.log(queue.peek()); // => 2

//เหลือข้อมูลแค่ 3 เพราะถูกลบออกไป 1
console.log(queue.length); // => 3

เป็นยังไงกันบ้างกับตัวอย่างการใช้งาน Data Structures กับ JavaScript พอเห็นภาพขึ้นมาบ้างไหม? มันจะเป็นประโยชน์มากเลยนะถ้าเราเข้าใจพื้นฐานพวกนี้ ซึ่งมันก็จะช่วยอำนวยความสะดวกให้เราในการเขียนโปรแกรมมากยิ่งขึ้น เพื่อนๆ ก็สามารถไปประยุกต์ใช้งานกับโปรแกรมของเพื่อนๆ ได้ตามความเหมาะสมเลยนะคะ 😊

Kanthima Muangsen

Author Kanthima Muangsen

More posts by Kanthima Muangsen

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

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

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

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

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

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

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

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