เทคนิคการเขียนโค้ดเพื่อการจัดการข้อมูลในภาษา TypeScript โดยใช้ Linked List
ในโลกของการเขียนโปรแกรม การเลือกโครงสร้างข้อมูลที่เหมาะสมเพื่อการจัดเก็บและการจัดการข้อมูลเป็นสิ่งสำคัญยิ่ง หนึ่งในโครงสร้างข้อมูลที่ไม่เคยห่างหายไปจากโลกโปรแกรมมิ่งก็คือ Linked List นั่นเอง ในบทความนี้ เราจะมาตรวจสอบเทคนิคและวิธีการใช้ Linked List ในภาษา TypeScript ซึ่งเป็นภาษาที่เพิ่มความแข็งแรงให้กับ JavaScript ด้วย static typing และความสามารถในการบริหารจัดการข้อมูลอย่างมีประสิทธิภาพ
Linked List เป็นโครงสร้างข้อมูลแบบ linear ที่เก็บข้อมูลแต่ละอันเรียงต่อกันเป็นลิงก์ แต่ละโหนด (node) มีสองส่วนหลัก คือ ข้อมูล (data) และการอ้างอิง (reference) ไปยังโหนดถัดไป การใช้งาน Linked List มีความได้เปรียบในเรื่องของการเพิ่ม (insert) หรือลบ (delete) โหนด เพราะว่าไม่จำเป็นต้องเรียงข้อมูลใหม่ทั้งหมดอย่างใน array
การเพิ่มข้อมูลใน Linked List สามารถทำได้ง่ายดายโดยการแทรกโหนดใหม่ระหว่างโหนดที่มีอยู่แล้ว ดังตัวอย่างโค้ด TypeScript นี้:
class ListNode {
constructor(public data: T, public next: ListNode | null = null) {}
}
class LinkedList {
private head: ListNode | null = null;
public insert(data: T, position: number): void {
if (position < 0) return;
let node = new ListNode(data);
if (position === 0) {
node.next = this.head;
this.head = node;
} else {
let current = this.head;
let previous;
for (let i = 0; i < position; i++) {
if (!current) return;
previous = current;
current = current.next;
}
node.next = current;
if (previous) previous.next = node;
}
}
// ... (จะมีเมธอดอื่นๆ ตามมา)
}
การเพิ่มข้อมูลด้วยเมธอด `insert` จะต้องระบุข้อมูลที่ต้องการแทรก และตำแหน่งของโหนด ถ้าต้องการแทรกที่ต้นของ Linked List หรือที่หาง ก็จะทำการอัปเดต `next` ของโหนดใหม่ และ `next` ของโหนดที่อยู่ก่อนหน้านั้นถ้ามี
การอัปเดตข้อมูลใน Linked List เป็นเรื่องง่าย โดยการค้นหาโหนดที่ต้องการและเปลี่ยนแปลงข้อมูลในโหนดนั้น ตัวอย่างเช่น:
// ... (ทำตามโค้ด LinkedList ที่มาก่อนหน้า)
public update(data: T, position: number): void {
if (this.head == null || position < 0) {
return;
} else {
let current = this.head;
for (let i = 0; i < position; i++) {
if (current === null) return;
current = current.next;
}
if (current !== null) {
current.data = data;
}
}
}
การอัปเดตข้อมูลใหม่เพียงแค่ต้องระบุข้อมูลและตำแหน่งที่ต้องการอัปเดต
การค้นหาข้อมูลใน Linked List นั้นต้านแตกต่างจาก Array และโครงสร้างข้อมูลอื่นๆ เพราะว่าข้อมูลอาจจะกระจายอยู่ทั่วทั้งโครงสร้าง ตัวอย่างโค้ดในวิธีค้นหาข้อมูล:
// ... (ทำตามโค้ด LinkedList ที่มาก่อนหน้า)
public find(data: T): ListNode | null {
let current = this.head;
while (current !== null) {
if (current.data === data) {
return current;
}
current = current.next;
}
return null;
}
เมธอด `find` ทำงานโดยวนรอบตั้งแต่หัวจนถึงหางของ linked list เพื่อค้นหาข้อมูลที่ตรงกับเงื่อนไข
การลบข้อมูลใน Linked List ก็เป็นอีกหนึ่งการทำงานที่ง่ายดาย โดยตัวอย่างการลบข้อมูลจาก Linked List แสดงดังนี้:
// ... (ทำตามโค้ด LinkedList ที่มาก่อนหน้า)
public delete(data: T): void {
if (this.head == null) return;
if (this.head.data === data) {
this.head = this.head.next;
return;
}
let current = this.head;
let previous;
while (current !== null) {
if (current.data === data) {
if (previous) previous.next = current.next;
return;
}
previous = current;
current = current.next;
}
}
โค้ดนี้จะทำการลบโหนดที่มีข้อมูลตรงกับที่กำหนดไว้ และจะทำการอัปเดตการอ้างอิง `nex`.
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM