Jak budować struktury danych za pomocą klas JavaScript ES6

Jak budować struktury danych za pomocą klas JavaScript ES6

Struktury danych są podstawowym aspektem informatyki i programowania, niezależnie od używanego języka. Dokładna ich znajomość może pomóc w sprawnym organizowaniu, zarządzaniu, przechowywaniu i modyfikowaniu danych. Zidentyfikowanie odpowiedniej struktury danych dla danego przypadku użycia może znacznie poprawić wydajność.





Jednak JavaScript domyślnie zawiera tylko prymitywne struktury danych, takie jak tablice i obiekty. Jednak wraz z wprowadzeniem klas ECMAScript 6 (ES6) można teraz tworzyć niestandardowe struktury danych, takie jak stosy i kolejki, za pomocą prymitywnych struktur danych.





ile godzin na opanowanie czegoś

Struktura danych stosu

Struktura danych stosu pozwala na przesyłanie nowych danych na istniejące dane w sposób LIFO (ostatnie weszło, pierwsze wyszło). Ta liniowa struktura danych jest łatwa do zobrazowania na prostym przykładzie. Rozważ stos talerzy trzymanych na stole. Możesz dodać lub usunąć talerz tylko z wierzchu stosu.





Oto jak zaimplementować strukturę danych stosu za pomocą tablic JavaScript i Klasy ES6 :

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

Przyjrzyjmy się i zbudujmy niektóre operacje, które możesz wykonać na stosie.



Operacja pchania

Operacja wypychania służy do wstawiania nowych danych do stosu. Musisz przekazać dane jako parametr podczas wywoływania metody push. Przed wstawieniem danych górny wskaźnik stosu jest zwiększany o jeden, a nowe dane są wstawiane na najwyższej pozycji.

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

Operacja pop

Operacja pop służy do usunięcia najwyższego elementu danych ze stosu. Podczas wykonywania tej operacji górny wskaźnik zmniejsza się o 1.





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

Operacja podglądu

Operacja peek służy do zwracania wartości znajdującej się na szczycie stosu. Złożoność czasowa pobierania tych danych wynosi O(1).

Ucz się więcej: Co to jest notacja Big-O?





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

Struktura danych połączonych list

Lista połączona to liniowa struktura danych składająca się z wielu węzłów połączonych ze sobą za pomocą wskaźników. Każdy węzeł na liście zawiera dane i zmienną wskaźnikową, która wskazuje na następny węzeł na liście.

Dowiedz się więcej: Wprowadzenie do wskaźników dla programistów

W przeciwieństwie do stosu, implementacje list połączonych w JavaScript wymagają dwóch klas. Pierwsza klasa to Węzeł klasa do tworzenia węzła, a drugą klasą jest Połączona lista do wykonywania wszystkich operacji na połączonej liście. Wskaźnik głowy wskazuje pierwszy węzeł połączonej listy, a wskaźnik ogona wskazuje ostatni węzeł połączonej listy.

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

Oto kilka podstawowych operacji, które można wykonać na połączonej liście:

Operacja dołączania

Operacja dołączania służy do dodawania nowego węzła na końcu połączonej listy. Musisz przekazać dane jako parametr do wstawienia nowego węzła. Najpierw utwórz nowy obiekt węzła za pomocą Nowy słowo kluczowe w JavaScript.

Jeśli połączona lista jest pusta, zarówno wskaźnik głowy, jak i ogona będą wskazywać na nowy węzeł. W przeciwnym razie tylko wskaźnik ogona będzie wskazywał nowy węzeł.

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

Operacja wstawiania

Aby wstawić nowy węzeł pod określonym indeksem, możesz skorzystać z operacji wstawiania. Ta metoda przyjmuje dwa parametry: dane do wstawienia i indeks, pod którym mają zostać wstawione. W najgorszym przypadku ta metoda ma złożoność czasową O(N), ponieważ może wymagać przejścia przez całą listę.

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

Usuń operację

Operacja usuwania przechodzi przez połączoną listę, aby uzyskać odniesienie do węzła, który ma zostać usunięty, i usuwa łącze poprzedniego węzła. Podobnie do operacji wstawiania, operacja usuwania również ma złożoność czasową O(N) w najgorszym przypadku.

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 danych kolejki

Struktura danych w kolejce jest podobna do wielu osób stojących w kolejce. Osoba, która jako pierwsza wejdzie do kolejki, jest obsługiwana przed innymi. Podobnie ta liniowa struktura danych jest zgodna z podejściem FIFO (pierwsze weszło, pierwsze wyszło) do wstawiania i usuwania danych. Ta struktura danych może zostać odtworzona w JavaScript za pomocą połączonej listy w następujący sposób:

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

Oto jak możesz wstawiać i usuwać dane z kolejki w JavaScript:

jak zrobić naklejki na telegram

Operacja w kolejce

Operacja enqueue wstawia nowe dane do kolejki. Podczas wywoływania tej metody, jeśli struktura danych kolejki jest pusta, zarówno przedni, jak i tylny wskaźnik wskazują na nowo wstawiony węzeł w kolejce. Jeśli kolejka nie jest pusta, nowy węzeł jest dodawany na końcu listy, a tylny wskaźnik wskazuje na ten węzeł.

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

Operacja usuwania z kolejki

Operacja usunięcia z kolejki usuwa pierwszy element z kolejki. Podczas operacji usuwania z kolejki, wskaźnik głowy jest przesuwany do przodu do drugiego węzła na liście. Ten drugi węzeł staje się teraz szefem kolejki.

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

Następny krok po strukturach danych

Struktury danych mogą być trudne do zrozumienia, zwłaszcza jeśli dopiero zaczynasz programować. Ale tak jak każda inna umiejętność, praktyka może pomóc Ci naprawdę zrozumieć i docenić wydajność, jaką zapewnia przechowywanie i zarządzanie danymi w Twoich aplikacjach.

Algorytmy są tak samo przydatne jak struktury danych i mogą stać się kolejnym logicznym krokiem w Twojej podróży programistycznej. Dlaczego więc nie zacząć od algorytmu sortowania, takiego jak sortowanie bąbelkowe?

Udział Udział Ćwierkać E-mail Wprowadzenie do algorytmu sortowania bąbelkowego

Algorytm Bubble Sort: doskonałe wprowadzenie do sortowania tablic.

Czytaj dalej
Powiązane tematy
  • Programowanie
  • JavaScript
  • Programowanie
  • Poradniki kodowania
O autorze Nitin Ranganath(31 opublikowanych artykułów)

Nitin jest zapalonym programistą i studentem inżynierii komputerowej tworzącym aplikacje internetowe przy użyciu technologii JavaScript. Pracuje jako niezależny programista stron internetowych, aw wolnym czasie lubi pisać dla Linuksa i programowania.

Więcej od Nitina Ranganatha

Zapisz się do naszego newslettera

Dołącz do naszego newslettera, aby otrzymywać porady techniczne, recenzje, bezpłatne e-booki i ekskluzywne oferty!

Kliknij tutaj, aby zasubskrybować