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ąbelkowegoAlgorytm Bubble Sort: doskonałe wprowadzenie do sortowania tablic.
Czytaj dalej Powiązane tematy- Programowanie
- JavaScript
- Programowanie
- Poradniki kodowania
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 RanganathaZapisz 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ć