การจัดการข้อมูลเป็นสิ่งหนึ่งที่สำคัญมากในโลกของการเขียนโปรแกรม โดยเฉพาะการจัดการข้อมูลแบบไดนามิคที่มีการเปลี่ยนแปลงตลอดเวลา ใน JavaScript, linked list เป็นหนึ่งในโครงสร้างข้อมูลที่ช่วยให้การจัดการข้อมูลแบบไดนามิคเป็นไปอย่างมีประสิทธิภาพ เราจะมาดูวิธีการนี้ผ่านการสร้าง linked list และการใช้มันในการ insert, insertAtFront, find และ delete ข้อมูล
Linked list เป็นโครงสร้างข้อมูลที่ประกอบด้วย node ที่ต่อเชื่อมกัน โดยทุก ๆ node จะมีสองส่วนหลักคือ data และ pointer ที่ชี้ไปยัง node ถัดไป ใน JavaScript, linked list ไม่มีภายในภาษาเอง แต่เราสามารถสร้างมันขึ้นมาได้เอง
จุดเริ่มต้นของ linked list คือการสร้าง class สำหรับ node:
class ListNode {
constructor(data) {
this.data = data;
this.next = null;
}
}
จากนั้นเราสร้าง class สำหรับ linked list ที่บรรจุ method ต่างๆ:
class LinkedList {
constructor() {
this.head = null;
}
// การแทรกข้อมูล
insert(data) {
const newNode = new ListNode(data);
if (this.head) {
newNode.next = this.head;
}
this.head = newNode;
}
// การแทรกข้อมูลที่หัว list
insertAtFront(data) {
const newNode = new ListNode(data);
newNode.next = this.head;
this.head = newNode;
}
// การค้นหาข้อมูล
find(data) {
let current = this.head;
while(current !== null) {
if (current.data === data) {
return current;
}
current = current.next;
}
return null; // ไม่พบข้อมูล
}
// การลบข้อมูล
delete(data) {
let current = this.head;
let previous = null;
while (current !== null) {
if (current.data === data) {
if (previous) {
previous.next = current.next;
} else {
this.head = current.next;
}
return current.data;
}
previous = current;
current = current.next;
}
return null; // ไม่พบข้อมูลที่ต้องการลบ
}
}
insert(data):
การแทรกข้อมูลล่าสุดไว้ที่หัว list โดยสร้าง node ใหม่และตั้งค่า pointer ของมันให้ชี้ไปยังข้อมูลปัจจุบันที่หัว listinsertAtFront(data):
เหมือนกับ insert แต่ถูกใช้เพื่อเน้นว่าข้อมูลนี้จะถูกแทรกไว้ที่หัว listfind(data):
ค้นหาข้อมูลใน list โดยเริ่มจากหัว list และเดินทางไปตาม pointer จนกว่าจะพบข้อมูลหรือถึงสิ้นสุด listdelete(data):
ลบข้อมูลจาก list โดยการค้นหา node ที่มีข้อมูลนั้น แล้วปรับ pointer ของ node ก่อนหน้าให้ชี้ไปยัง node ถัดไปหลังจาก node ที่ถูกลบ
ข้อดี:
- การเพิ่มหรือลบ: Linked list มีประสิทธิภาพสูงในการเพิ่มหรือลบ node เพราะทำได้ง่ายโดยการปรับ pointer เท่านั้น - หน่วยความจำ: มีการใช้หน่วยความจำอย่างมีประสิทธิภาพเนื่องจากจองเพียงพอตามจำนวนข้อมูลที่เพิ่มเข้ามาข้อเสีย:
- การเข้าถึง: เข้าถึงข้อมูลได้ช้ากว่า array เนื่องจากต้องเดินผ่าน pointer หากต้องการข้อมูลตำแหน่งที่เจาะจง - หน่วยความจำเพิ่มเติม: ทุก node ต้องมีหน่วยความจำสำหรับเก็บ pointer ซึ่งเป็น overhead ที่ไม่ต้องการในกรณีของ array
การเขียนโค้ดเพื่อการจัดการข้อมูลแบบไดนามิคใน JavaScript สามารถทำได้ดีผ่าน linked list ที่มี flexibility สูงในการเพิ่มหรือลบข้อมูล หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ linked list หรือสิ่งอื่น ๆ ในวงการเขียนโปรแกรม, ที่ EPT (Expert-Programming-Tutor) เรามีหลักสูตรและเนื้อหาที่จะทำให้คุณเป็นโปรแกรมเมอร์ที่เข้าใจโครงสร้างข้อมูลและสามารถนำมันไปใช้ในการพัฒนาแอปพลิเคชั่นได้อย่างมืออาชีพ สนใจร่วมศึกษากับพวกเราได้วันนี้!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM