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ő algoritmusbaA 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
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ólIratkozzon 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