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ćaAlgoritam sortiranja mjehurića: izvrstan uvod u sortiranje nizova.
Pročitajte Dalje Povezane teme- Programiranje
- JavaScript
- Programiranje
- Vodiči za kodiranje
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 RanganathaPretplatite 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