Adatstruktúrák létrehozása JavaScript ES6 osztályokkal

Adatstruktúrák létrehozása JavaScript ES6 osztályokkal

Az adatstruktúrák az informatika és a programozás alapvető elemei, függetlenül attól, hogy milyen nyelvet használnak. Ezek alapos ismerete segíthet az adatok hatékony rendszerezésében, kezelésében, tárolásában és módosításában. A felhasználási eset megfelelő adatstruktúrájának azonosítása nagymértékben javíthatja a teljesítményt.





A JavaScript azonban alapértelmezés szerint csak primitív adatstruktúrákkal érkezik, mint például tömbök és objektumok. De az ECMAScript 6 (ES6) osztályok bevezetésével mostantól egyéni adatstruktúrákat hozhat létre, például veremeket és sorokat primitív adatstruktúrák segítségével.





Hogyan lehet elforgatni egy videót a Windows Media Playerben?

Halom adatszerkezet

A verem adatstruktúra lehetővé teszi, hogy új adatokat helyezzen a meglévő adatok tetejére LIFO (utolsó be, első ki) módon. Ezt a lineáris adatstruktúrát egy egyszerű példán keresztül könnyű megjeleníteni. Tekintsünk egy halom tányért az asztalra. Tányért csak a verem tetejéről vehet fel vagy távolíthat el.





Íme, hogyan valósíthatja meg a verem adatstruktúrát a JavaScript tömbök és ES6 osztályok :

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

Fedezzük fel és építsük fel a veremben végrehajtható műveletek egy részét.



Nyomóművelet

A push műveletet új adatok behelyezésére használják a verembe. Az adatokat paraméterként kell megadnia a push módszer meghívása közben. Az adatok beillesztése előtt a verem felső mutatóját eggyel növeljük, és az új adatokat a felső pozícióba illesztjük be.

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

Pop művelet

A pop művelet a verem legfelső adatelemének eltávolítására szolgál. E művelet végrehajtása közben a felső mutató 1 -gyel csökken.





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

Peek művelet

A lekérési művelet a verem tetején lévő érték visszaadására szolgál. Ezen adatok lekérésének időbeli összetettsége O (1).

Tudj meg többet: Mi az a Big-O jelölés?





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

Linkelt lista adatszerkezete

A linkelt lista egy lineáris adatstruktúra, amely mutatók segítségével összekapcsolt számos csomópontból áll. A lista minden csomópontja tartalmazza az adatokat és egy mutatóváltozót, amely a lista következő csomópontjára mutat.

További információ: Bevezetés a mutatókba programozóknak

A veremtől eltérően a JavaScript összekapcsolt lista implementációi két osztályt igényelnek. Az első osztály a Csomópont osztály egy csomópont létrehozásához, a második osztály pedig a LinkedList osztály a linkelt listán szereplő összes művelet végrehajtásához. A fejmutató a hivatkozott lista első csomópontjára, a farokmutató pedig a hivatkozott lista utolsó csomópontjára mutat.

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

Íme néhány elsődleges művelet, amelyet elvégezhet egy linkelt listán:

Művelet hozzáfűzése

A hozzáfűzési művelet segítségével új csomópontot adhat hozzá a hivatkozott lista végéhez. Az adatokat át kell adni paraméterként egy új csomópont beszúrásához. Először hozzon létre egy új csomópont objektumot a új kulcsszó a JavaScriptben.

Ha a linkelt lista üres, akkor a fej és a farokmutató is az új csomópontra mutat. Ellenkező esetben csak a farokmutató mutat az új csomópontra.

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

Beszúrás művelet

Új csomópont beszúrásához egy adott indexhez használhatja a beszúrási műveletet. Ez a módszer két paramétert tartalmaz: a beillesztendő adatokat és az indexet, amelyhez be kell illeszteni. A legrosszabb esetben ennek a módszernek az O (N) időbeli összetettsége van, mivel előfordulhat, hogy végig kell haladnia a teljes listán.

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

Művelet törlése

A törlés művelet áthalad a linkelt listán, hogy megkapja a törlendő csomópont hivatkozását, és eltávolítja az előző csomópont linkjét. A beszúrási művelethez hasonlóan a törlési művelet időbeli összetettsége is O (N) a legrosszabb esetben.

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

Sor adatstruktúrája

A sor adatstruktúrája hasonlít egy sor emberhez, akik sorban állnak. Az elsőként sorba lépő személyt szolgálják ki mások előtt. Hasonlóképpen, ez a lineáris adatstruktúra követi a FIFO (first in, first out) megközelítést az adatok beillesztéséhez és eltávolításához. Ez az adatstruktúra JavaScriptben újból létrehozható egy linkelt lista használatával az alábbi módon:

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

A következőképpen illeszthet be és távolíthat el adatokat a sorból a JavaScriptben:

hogyan lehet nyomon követni az ip címet az e -mailből

Enqueue Operation

Az enqueue művelet új adatokat illeszt be a sorba. Ennek a módszernek a meghívása közben, ha a sor adatstruktúrája üres, mind az első, mind a hátsó mutató a sorban újonnan beszúrt csomópontra mutat. Ha a sor nem üres, az új csomópont hozzáadódik a lista végéhez, és a hátsó mutató erre a csomópontra mutat.

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

Dequeue művelet

A késleltetési művelet eltávolítja a sor első elemét. A leválasztási művelet során a fejmutató a lista második csomópontjába kerül. Ez a második csomópont lesz a sor feje.

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

A következő lépés az adatszerkezetek után

Az adatstruktúrák bonyolult fogalmak lehetnek, különösen akkor, ha még nem ismeri a programozást. De mint minden más készség, a gyakorlat is segíthet abban, hogy valóban megértse és értékelje az alkalmazásokban tárolt és kezelt adatok hatékonyságát.

Az algoritmusok ugyanolyan hasznosak, mint az adatstruktúrák, és a programozási út következő logikus lépéseivé válhatnak. Tehát miért nem kezd egy válogatási algoritmussal, például a buborékrendezéssel?

Részvény Részvény Csipog Email Bevezetés a buborékrendező algoritmusba

A Bubble Sort algoritmus: kiváló bevezetés a tömbök rendezéséhez.

Olvassa tovább
Kapcsolódó témák
  • Programozás
  • JavaScript
  • Programozás
  • Kódolási oktatóanyagok
A szerzőről Nitin Ranganath(31 cikk megjelent)

Nitin lelkes szoftverfejlesztő és számítástechnikai hallgató, aki webes alkalmazásokat fejleszt JavaScript technológiák segítségével. Szabadúszó webfejlesztőként dolgozik, szabadidejében szeret Linuxra és programozásra írni.

Továbbiak Nitin Ranganath -tól

Iratkozzon fel hírlevelünkre

Csatlakozz hírlevelünkhöz, ahol technikai tippeket, értékeléseket, ingyenes e -könyveket és exkluzív ajánlatokat találsz!

Feliratkozáshoz kattintson ide