วิธีสร้างโครงสร้างข้อมูลด้วยคลาส JavaScript ES6

วิธีสร้างโครงสร้างข้อมูลด้วยคลาส JavaScript ES6

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





อย่างไรก็ตาม JavaScript มาพร้อมกับโครงสร้างข้อมูลดั้งเดิม เช่น อาร์เรย์และอ็อบเจ็กต์โดยค่าเริ่มต้นเท่านั้น แต่ด้วยการแนะนำคลาส ECMAScript 6 (ES6) คุณสามารถสร้างโครงสร้างข้อมูลที่กำหนดเอง เช่น สแต็คและคิวด้วยความช่วยเหลือของโครงสร้างข้อมูลดั้งเดิม





วิธีการกู้คืนรูปภาพที่ถูกลบ android

โครงสร้างข้อมูลกอง

โครงสร้างข้อมูลสแต็กอนุญาตให้คุณพุชข้อมูลใหม่ทับข้อมูลที่มีอยู่ในลักษณะ LIFO (เข้าก่อน ออกก่อน) โครงสร้างข้อมูลเชิงเส้นนี้มองเห็นได้ง่ายโดยใช้ตัวอย่างง่ายๆ พิจารณากองจานที่วางอยู่บนโต๊ะ คุณสามารถเพิ่มหรือนำจานออกจากด้านบนของกองได้เท่านั้น





ต่อไปนี้คือวิธีที่คุณสามารถใช้โครงสร้างข้อมูลสแต็กโดยใช้อาร์เรย์ JavaScript และ คลาส ES6 :

class Stack {
constructor() {
this.data = [];
this.top = -1;
}
}

มาสำรวจและสร้างการดำเนินการบางอย่างที่คุณสามารถทำได้บนสแต็ก



ผลักดันการดำเนินงาน

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

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

ป๊อป ปฏิบัติการ

การดำเนินการป๊อปใช้เพื่อลบองค์ประกอบข้อมูลบนสุดของสแต็ก ขณะดำเนินการนี้ ตัวชี้บนสุดจะลดลง 1





pop() {
if (this.top <0) return undefined;
const poppedTop = this.data[this.top];
this.top--;
return poppedTop;
}

ปฏิบัติการแอบดู

การดำเนินการ peek ใช้เพื่อคืนค่าปัจจุบันที่ด้านบนของสแต็ก ความซับซ้อนของเวลาในการดึงข้อมูลนี้คือ O(1)

เรียนรู้เพิ่มเติม: สัญกรณ์ Big-O คืออะไร?





peek() {
return this.top >= 0 ? this.data[this.top] : undefined;
}

โครงสร้างข้อมูลรายการที่เชื่อมโยง

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

เรียนรู้เพิ่มเติม: บทนำสู่พอยน์เตอร์สำหรับโปรแกรมเมอร์

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

class Node {
constructor(data, next = null) {
this.data = data;
this.next = next;
}
}
class LinkedList {
constructor() {
this.head = null;
this.tail = null;
this.size = 0;
}
}

ต่อไปนี้คือการดำเนินการหลักบางอย่างที่คุณสามารถทำได้บนรายการที่เชื่อมโยง:

ผนวกการดำเนินการ

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

หากรายการที่เชื่อมโยงว่างเปล่า ทั้งตัวชี้ส่วนหัวและส่วนท้ายจะชี้ไปที่โหนดใหม่ มิฉะนั้น เฉพาะตัวชี้ส่วนท้ายเท่านั้นที่จะชี้ไปที่โหนดใหม่

append(data) {
const newNode = new Node(data);
if (!this.head) {
this.head = newNode;
this.tail = newNode;
} else {
this.tail.next = newNode;
this.tail = newNode;
}
this.size++;
return this;
}

การดำเนินการแทรก

หากต้องการแทรกโหนดใหม่ที่ดัชนีใดดัชนีหนึ่ง คุณสามารถใช้การดำเนินการแทรกได้ วิธีนี้ใช้พารามิเตอร์สองตัว: ข้อมูลที่จะแทรกและดัชนีที่จะแทรก ในกรณีที่เลวร้ายที่สุด วิธีนี้มีเวลาที่ซับซ้อนของ O(N) เนื่องจากอาจต้องข้ามผ่านรายการทั้งหมด

insert(data, index) {
if (index this.size) return undefined;
if (index === 0) {
this.head = new Node(data, this.head);
!this.tail ? (this.tail = this.head) : null;
this.size++;
return this;
}
if (index === this.size) return this.append(data);
let count = 0;
let beforeNode = this.head;
while (count !== index) {
beforeNode = beforeNode.next;
count++;
}
const newNode = new Node(data);
let afterNode = beforeNode.next;
newNode.next = afterNode;
beforeNode.next = newNode;
this.size++;
return this;
}

ลบการดำเนินการ

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

deleteNode(index) {
if (index === 0) {
const removedHead = this.head;
this.head = this.head.next;
this.size--;
this.size === 0 ? (this.tail = null) : null;
return removedHead;
}
if (index === this.size - 1) {
if (!this.head) return undefined;
let currentNode = this.head;
let newTail = currentNode;
while (currentNode.next) {
newTail = currentNode;
currentNode = currentNode.next;
}
this.tail = newTail;
this.tail.next = null;
this.size--;
this.size === 0 ? ([this.head, this.tail] = [null, null]) : null;
return currentNode;
}
if (index this.size - 1) return undefined;
let count = 0;
let beforeNode = this.head;
while (count !== index - 1) {
beforeNode = beforeNode.next;
count++;
}
const removedNode = beforeNode.next;
let afterNode = removedNode.next;
beforeNode.next = afterNode;
removedNode.next = null;
this.size--;
return removedNode;
}

โครงสร้างข้อมูลคิว

โครงสร้างข้อมูลคิวคล้ายกับกลุ่มคนที่ยืนอยู่ในคิว ผู้ที่เข้าคิวก่อนจะได้รับบริการก่อนผู้อื่น ในทำนองเดียวกัน โครงสร้างข้อมูลเชิงเส้นนี้เป็นไปตามแนวทาง FIFO (เข้าก่อน ออกก่อน) เพื่อแทรกและลบข้อมูล โครงสร้างข้อมูลนี้สามารถสร้างขึ้นใหม่ใน JavaScript โดยใช้รายการที่เชื่อมโยงในลักษณะนี้:

class Queue {
constructor() {
this.front = null;
this.rear = null;
this.size = 0;
}
}

วิธีแทรกและลบข้อมูลออกจากคิวใน JavaScript มีดังนี้

วิธีลบบัญชี hotmail

เข้าคิวดำเนินการ

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

enqueue(data) {
const newNode = new Node(data);
if (!this.front) {
this.front = newNode;
this.rear = newNode;
} else {
this.rear.next = newNode;
this.rear = newNode;
}
this.size++;
return this;
}

การดำเนินการยกเลิกคิว

การดำเนินการ dequeue จะลบองค์ประกอบแรกในคิว ในระหว่างการดำเนินการ dequeue ตัวชี้ส่วนหัวจะถูกย้ายไปข้างหน้าไปยังโหนดที่สองในรายการ โหนดที่สองนี้จะกลายเป็นส่วนหัวของคิว

dequeue() {
if (!this.front) return undefined;
if (this.front === this.rear) this.rear = null;
const dequeuedNode = this.front;
this.front = this.front.next;
this.size--;
return dequeuedNode;
}

ขั้นตอนต่อไปหลังจากโครงสร้างข้อมูล

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

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

แบ่งปัน แบ่งปัน ทวีต อีเมล บทนำสู่ Bubble Sort Algorithm

อัลกอริธึม Bubble Sort: ข้อมูลเบื้องต้นเกี่ยวกับการจัดเรียงอาร์เรย์

อ่านต่อไป
หัวข้อที่เกี่ยวข้อง
  • การเขียนโปรแกรม
  • JavaScript
  • การเขียนโปรแกรม
  • บทเรียนการเข้ารหัส
เกี่ยวกับผู้เขียน นิทิน รังคนาถ(31 บทความที่ตีพิมพ์)

Nitin เป็นนักพัฒนาซอฟต์แวร์ตัวยงและเป็นนักศึกษาวิศวกรรมคอมพิวเตอร์ที่พัฒนาเว็บแอปพลิเคชันโดยใช้เทคโนโลยี JavaScript เขาทำงานเป็นนักพัฒนาเว็บอิสระและชอบเขียนสำหรับ Linux และการเขียนโปรแกรมในเวลาว่าง

เพิ่มเติมจาก Nitin Ranganath

สมัครรับจดหมายข่าวของเรา

เข้าร่วมจดหมายข่าวของเราสำหรับเคล็ดลับทางเทคนิค บทวิจารณ์ eBook ฟรี และดีลพิเศษ!

คลิกที่นี่เพื่อสมัครสมาชิก