Hur man bygger datastrukturer med JavaScript ES6 -klasser

Hur man bygger datastrukturer med JavaScript ES6 -klasser

Datastrukturer är en grundläggande aspekt av datavetenskap och programmering, oavsett vilket språk du använder. Att ha grundlig kunskap om dem kan hjälpa dig att effektivt organisera, hantera, lagra och ändra data. Att identifiera rätt datastruktur för ditt användningsfall kan förbättra prestanda med en enorm marginal.





JavaScript kommer dock bara med primitiva datastrukturer som arrays och objekt som standard. Men med introduktionen av ECMAScript 6 (ES6) -klasser kan du nu skapa anpassade datastrukturer som staplar och köer med hjälp av primitiva datastrukturer.





hur synkroniserar jag mina e -postkonton

Stapla datastruktur

Stackdatastrukturen gör att du kan skjuta ny data ovanpå befintliga data på ett LIFO-sätt (sist in, först ut). Denna linjära datastruktur är lätt att visualisera med ett enkelt exempel. Tänk på en bunt tallrikar som finns på ett bord. Du kan bara lägga till eller ta bort en tallrik från toppen av bunten.





Så här kan du implementera stackdatastrukturen med hjälp av JavaScript -arrays och ES6 -klasser :

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

Låt oss utforska och bygga några av de operationer som du kan utföra på en stapel.



Push -drift

Pushoperationen används för att infoga ny data i stacken. Du måste skicka data som en parameter medan du anropar push -metoden. Innan du sätter in data ökas stapelns översta pekare med en, och de nya uppgifterna infogas i toppositionen.

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

Popoperation

Popoperationen används för att ta bort det översta dataelementet i stapeln. När du utför den här åtgärden reduceras den övre pekaren med 1.





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

Kika operation

Peek -operationen används för att returnera värdet som finns högst upp i stapeln. Tidskomplexiteten för att hämta dessa data är O (1).

Läs mer: Vad är Big-O Notation?





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

Datastruktur för länkad lista

En länkad lista är en linjär datastruktur som består av många noder anslutna till varandra med hjälp av pekare. Varje nod i listan innehåller data och en pekarvariabel som pekar på nästa nod i listan.

Läs mer: En introduktion till pekare för programmerare

Till skillnad från en stack kräver länkade listimplementeringar i JavaScript två klasser. Första klassen är Nod klass för att skapa en nod, och den andra klassen är Länkad lista klass för att utföra alla operationer på den länkade listan. Huvudpekaren pekar på den första noden i den länkade listan och svanspekaren pekar på den sista noden i den länkade listan.

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

Här är några primära operationer som du kan utföra på en länkad lista:

Lägg till drift

Tilläggsoperationen används för att lägga till en ny nod i slutet av den länkade listan. Du måste skicka data som en parameter för att infoga en ny nod. Skapa först ett nytt nodobjekt med ny nyckelord i JavaScript.

Om den länkade listan är tom pekar både huvudet och svanspekaren på den nya noden. Annars pekar bara svanspekaren på den nya noden.

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

Infoga operation

Om du vill infoga en ny nod vid ett visst index kan du använda insatsoperationen. Denna metod tar två parametrar: data som ska infogas och indexet vid vilket den ska infogas. I värsta fall har denna metod en tidskomplexitet av O (N) eftersom den kan behöva gå igenom hela listan.

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

Radera operation

Raderingsoperationen går igenom den länkade listan för att få referensen till noden som ska raderas och tar bort länken till den föregående noden. I likhet med infogningsoperationen har raderingsoperationen också en tidskomplexitet på O (N) i värsta fall.

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

Ködatastruktur

Kodatastrukturen liknar ett gäng människor som står i en kö. Den som går in i kön först serveras före andra. På samma sätt följer denna linjära datastruktur FIFO -metoden (först in, först ut) för att infoga och ta bort data. Denna datastruktur kan återskapas i JavaScript med hjälp av en länkad lista på detta sätt:

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

Så här kan du infoga och ta bort data från en kö i JavaScript:

Windows 10 finns för närvarande inga strömalternativ tillgängliga

Enqueue -drift

Enqueue -operationen infogar ny data i kön. Medan den här metoden anropas, om ködatastrukturen är tom, pekar både den främre och den bakre pekaren på den nyligen införda noden i kön. Om kön inte är tom läggs den nya noden till i slutet av listan och den bakre pekaren pekar på den här noden.

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

Avkörning

Tömningsfunktionen tar bort det första elementet i kön. Under tömningsoperationen flyttas huvudpekaren framåt till den andra noden i listan. Denna andra nod blir nu köns huvud.

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ästa steg efter datastrukturer

Datastrukturer kan vara ett svårt koncept att förstå, särskilt om du är ny på programmering. Men precis som alla andra färdigheter kan övning hjälpa dig att verkligen förstå och uppskatta effektiviteten för lagring och hantering av data i dina applikationer.

Algoritmer är lika användbara som datastrukturer och kan bli nästa logiska steg i din programmeringsresa. Så varför inte börja med en sorteringsalgoritm som bubbelsortering?

Dela med sig Dela med sig Tweet E-post En introduktion till bubblasorteringsalgoritmen

Bubble Sort -algoritmen: en utmärkt introduktion till sorteringsarrayer.

Läs Nästa
Relaterade ämnen
  • Programmering
  • JavaScript
  • Programmering
  • Handledning för kodning
Om författaren Nitin Ranganath(31 artiklar publicerade)

Nitin är en ivrig mjukvaruutvecklare och en datoringenjörstudent som utvecklar webbapplikationer med hjälp av JavaScript -teknik. Han arbetar som frilansande webbutvecklare och gillar att skriva för Linux och programmering på fritiden.

Mer från Nitin Ranganath

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera