Sådan opbygges datastrukturer med JavaScript ES6 -klasser

Sådan opbygges datastrukturer med JavaScript ES6 -klasser

Datastrukturer er et grundlæggende aspekt af datalogi og programmering, uanset hvilket sprog du bruger. At have et indgående kendskab til dem kan hjælpe dig med effektivt at organisere, administrere, gemme og ændre data. At identificere den korrekte datastruktur til din use case kan forbedre ydeevnen med en enorm margin.





JavaScript leveres dog kun med primitive datastrukturer såsom arrays og objekter som standard. Men med introduktionen af ​​ECMAScript 6 (ES6) klasser kan du nu oprette brugerdefinerede datastrukturer såsom stakke og køer ved hjælp af primitive datastrukturer.





hvad betyder karma på reddit

Stabel datastruktur

Stabeldatastrukturen giver dig mulighed for at skubbe nye data oven på de eksisterende data på en LIFO-måde (sidst-ind, først-ud). Denne lineære datastruktur er let at visualisere ved hjælp af et enkelt eksempel. Overvej en stak tallerkener, der opbevares på et bord. Du kan kun tilføje eller fjerne en plade fra toppen af ​​stakken.



Sådan kan du implementere stack -datastrukturen ved hjælp af JavaScript -arrays og ES6 klasser :

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

Lad os undersøge og bygge nogle af de operationer, du kan udføre på en stak.



Push betjening

Push -operationen bruges til at indsætte nye data i stakken. Du skal videregive dataene som en parameter, mens du kalder push -metoden. Inden dataene indsættes, øges stakens øverste markør med en, og de nye data indsættes i øverste position.

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

Popoperation

Pop -operationen bruges til at fjerne det øverste dataelement i stakken. Under denne handling reduceres topmarkøren med 1.





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

Peek Operation

Peek -operationen bruges til at returnere værdien, der er til stede øverst på stakken. Tidskompleksiteten for at hente disse data er O (1).

Lær mere: Hvad er Big-O Notation?





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

Datastruktur for tilknyttet liste

En sammenkædet liste er en lineær datastruktur, der består af adskillige noder, der er forbundet med hinanden ved hjælp af pointer. Hver knude på listen indeholder dataene og en markørvariabel, der peger på den næste knude på listen.

Lær mere: En introduktion til tips til programmerere

I modsætning til en stak kræver linkede listeimplementeringer i JavaScript to klasser. Den første klasse er Node klasse for at oprette en knude, og den anden klasse er LinkedList klasse for at udføre alle operationer på den linkede liste. Hovedmarkøren peger på den første knude på den sammenkædede liste, og halemarkøren peger på den sidste knude på den sammenkædede liste.

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

Her er nogle primære operationer, som du kan udføre på en linket liste:

Tilføj drift

Tillægsfunktionen bruges til at tilføje en ny knude til slutningen af ​​den linkede liste. Du skal videregive dataene som en parameter for at indsætte en ny knude. For det første skal du oprette et nyt nodeobjekt ved hjælp af ny søgeord i JavaScript.

Hvis den linkede liste er tom, peger både hovedet og halemarkøren på den nye knude. Ellers vil kun halemarkøren pege på den nye knude.

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;
}

Indsæt drift

Hvis du vil indsætte en ny knude på et bestemt indeks, kan du gøre brug af indsætningsoperationen. Denne metode tager to parametre: dataene, der skal indsættes, og indekset, som de skal indsættes i. I værste fald har denne metode en tidskompleksitet på O (N), da den muligvis skal krydse gennem hele listen.

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;
}

Slet operation

Sletningsoperationen krydser gennem den linkede liste for at få henvisningen til den knude, der skal slettes, og fjerner linket til den forrige knude. På samme måde som indsættelsesoperationen har sletteoperationen også i værste tilfælde en tidskompleksitet på 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;
}

Datastruktur i kø

Kødatastrukturen ligner en flok mennesker, der står i en kø. Den person, der først kommer ind i køen, serveres før andre. På samme måde følger denne lineære datastruktur FIFO (først ind, først ud) tilgang til at indsætte og fjerne data. Denne datastruktur kan genskabes i JavaScript ved hjælp af en linket liste på denne måde:

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

Sådan kan du indsætte og fjerne data fra en kø i JavaScript:

page_fault_in_nonpaged_area windows 10

Enqueue Operation

Enqueue -operationen indsætter nye data i køen. Mens kø -datastrukturen er tom, peger både den forreste og bageste poin på den nyligt indsatte knude i køen, mens denne metode kaldes. Hvis køen ikke er tom, tilføjes den nye knude til slutningen af ​​listen, og den bageste markør peger på denne knude.

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;
}

Deaqueue -drift

Dequeue -operationen fjerner det første element i køen. Under tømningsoperationen flyttes hovedmarkøren frem til den anden knude på listen. Denne anden knude bliver nu køens leder.

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;
}

Næste trin efter datastrukturer

Datastrukturer kan være et vanskeligt koncept at forstå, især hvis du ikke er ny inden for programmering. Men ligesom alle andre færdigheder kan praksis hjælpe dig med virkelig at forstå og værdsætte den effektivitet, det giver til lagring og håndtering af data i dine applikationer.

Algoritmer er lige så nyttige som datastrukturer og kan blive det næste logiske trin i din programmeringsrejse. Så hvorfor ikke starte med en sorteringsalgoritme såsom boblesortering?

Del Del Tweet E -mail En introduktion til boblesorteringsalgoritmen

Bubble Sort -algoritmen: en glimrende introduktion til sorteringsarrays.

Læs Næste
Relaterede emner
  • Programmering
  • JavaScript
  • Programmering
  • Kodning Tutorials
Om forfatteren Nitin Ranganath(31 artikler udgivet)

Nitin er en ivrig softwareudvikler og en computeringeniørstuderende, der udvikler webapplikationer ved hjælp af JavaScript -teknologier. Han arbejder som freelance webudvikler og kan lide at skrive til Linux og programmering i fritiden.

Mere fra Nitin Ranganath

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere