Kako izgraditi strukture podataka s JavaScript ES6 klasama

Kako izgraditi strukture podataka s JavaScript ES6 klasama

Strukture podataka temeljni su aspekt računalne znanosti i programiranja, bez obzira na jezik koji koristite. Njihovo temeljito poznavanje može vam pomoći u učinkovitoj organizaciji, upravljanju, pohranjivanju i izmjeni podataka. Identificiranje odgovarajuće strukture podataka za vaš slučaj upotrebe može poboljšati performanse s velikom razlikom.





Međutim, JavaScript prema zadanim postavkama dolazi samo s primitivnim strukturama podataka kao što su nizovi i objekti. No, uvođenjem klasa ECMAScript 6 (ES6), sada možete stvarati prilagođene strukture podataka, kao što su hrpe i redovi, uz pomoć primitivnih struktura podataka.





igre bez flash playera i dodataka

Struktura podataka o hrpi

Struktura podataka hrpe omogućuje vam guranje novih podataka povrh postojećih podataka na način LIFO (posljednji ulaz, prvi izlaz). Ovu linearnu strukturu podataka lako je vizualizirati jednostavnim primjerom. Zamislite hrpu tanjura na stolu. Ploču možete dodati ili ukloniti samo s vrha snopa.





Evo kako možete implementirati strukturu podataka steka koristeći JavaScript nizove i ES6 klase :

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

Istražimo i izgradimo neke operacije koje možete izvesti na hrpi.



Operacija pritiskom

Operacija guranja koristi se za umetanje novih podataka u hrpu. Morate proslijediti podatke kao parametar tijekom pozivanja push metode. Prije umetanja podataka, gornji pokazivač snopa povećava se za jedan, a novi se podaci ubacuju na gornju poziciju.

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

Pop operacija

Operacija iskakanja koristi se za uklanjanje najgornjeg podatkovnog elementa hrpe. Tijekom izvođenja ove operacije gornji se pokazivač smanjuje za 1.





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

Operacija zavirivanja

Operacija zavirivanja koristi se za vraćanje vrijednosti prisutne na vrhu steka. Vremenska složenost za dohvaćanje ovih podataka je O (1).

Saznajte više: Što je Big-O notacija?





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

Struktura podataka povezanog popisa

Povezani popis linearna je struktura podataka koja se sastoji od brojnih čvorova međusobno povezanih pomoću pokazivača. Svaki čvor na popisu sadrži podatke i varijablu pokazivača koja upućuje na sljedeći čvor na popisu.

Saznajte više: Uvod u smjernice za programere

Za razliku od hrpe, implementacije povezanih popisa u JavaScriptu zahtijevaju dvije klase. Prva klasa je Čvor klase za stvaranje čvora, a druga klasa je LinkedList klase za izvođenje svih operacija na povezanom popisu. Pokazivač glave pokazuje na prvi čvor povezanog popisa, a repni pokazivač na posljednji čvor povezanog popisa.

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

Evo nekoliko primarnih operacija koje možete izvesti na povezanom popisu:

Operacija dodavanja

Operacija dodavanja koristi se za dodavanje novog čvora na kraj povezanog popisa. Morate proslijediti podatke kao parametar za umetanje novog čvora. Prvo, stvorite novi objekt čvora pomoću novi ključna riječ u JavaScriptu.

Ako je povezani popis prazan, i pokazivač glave i repa pokazat će na novi čvor. Inače će samo pokazivač repa pokazati na novi čvor.

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

Operacija umetanja

Da biste umetnuli novi čvor u određeni indeks, možete koristiti operaciju umetanja. Ova metoda uzima dva parametra: podatke za umetanje i indeks u koji ih treba umetnuti. U najgorem slučaju, ova metoda ima vremensku složenost O (N) jer će možda morati proći kroz cijeli popis.

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

Operacija brisanja

Operacija brisanja prolazi kroz povezani popis kako bi dobila referencu na čvor koji se briše i uklanja vezu prethodnog čvora. Slično operaciji umetanja, operacija brisanja također ima vremensku složenost O (N) u najgorem slučaju.

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

Struktura podataka o redu čekanja

Struktura podataka o redu čekanja slična je gomili ljudi koji stoje u redu. Osoba koja prva uđe u red poslužuje se prije ostalih. Slično, ova linearna struktura podataka slijedi FIFO (prvi ulaz, prvi izlaz) pristup umetanju i uklanjanju podataka. Ova se struktura podataka može ponovno stvoriti u JavaScriptu pomoću povezanog popisa na ovaj način:

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

Evo kako možete umetnuti i ukloniti podatke iz reda u JavaScriptu:

samsung galaxy sat 3 vs active 2

Operacija čekanja

Operacija enqueue umeće nove podatke u red. Prilikom pozivanja ove metode, ako je struktura podataka u redu prazna, prednji i stražnji pokazivači pokazuju na novo umetnuti čvor u redu. Ako red nije prazan, novi čvor dodaje se na kraj popisa, a stražnji pokazivač pokazuje na taj čvor.

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

Operacija čekanja

Operacija dequeue uklanja prvi element u redu. Tijekom operacije čekanja, pokazivač glave se pomiče naprijed na drugi čvor na popisu. Ovaj drugi čvor sada postaje glava reda.

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

Sljedeći korak nakon strukture podataka

Strukture podataka mogu biti težak koncept za shvatiti, pogotovo ako ste tek početnik u programiranju. No, kao i svaka druga vještina, praksa vam može pomoći da uistinu razumijete i cijenite učinkovitost koju pruža za pohranu i upravljanje podacima u vašim aplikacijama.

Algoritmi su jednako korisni kao i strukture podataka i mogli bi postati sljedeći logični korak na vašem programskom putu. Pa, zašto ne biste započeli s algoritmom za sortiranje, poput sortiranja mjehurićima?

Udio Udio Cvrkut E -pošta Uvod u algoritam sortiranja mjehurića

Algoritam sortiranja mjehurića: izvrstan uvod u sortiranje nizova.

Pročitajte Dalje
Povezane teme
  • Programiranje
  • JavaScript
  • Programiranje
  • Vodiči za kodiranje
O autoru Nitin Ranganath(Objavljen 31 članak)

Nitin je strastveni programer softvera i student računalnog inženjerstva koji razvija web aplikacije koristeći JavaScript tehnologije. Radi kao slobodni web programer, a u slobodno vrijeme voli pisati za Linux i programiranje.

Više od Nitina Ranganatha

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu