Kuidas rakendada virn vanilli JavaScripti ja ES6-s

Virna on järjestatud kogumist ja objekte, mis järgivad Viimase In First Out (LIFO) põhimõtet. Esemete lisamine ja eemaldamine toimub samas otsas ehk ülaosas. Uusimad elemendid asuvad ülaosas ja vanimad elemendid on allosas.

Meie ümber on palju näiteid virnadest, nagu raamatuhunnik, virn plaate või nõusid jne.

Stack kasutavad koostajad programmeerimiskeeltes, arvuti mälu salvestada muutujate ja funktsioonide kõned ja tekstiredaktoritest sooritada Undo & Tee uuesti tegevust.

Stackis tehtud toimingute loend

  • push () : lisab virna ülaosale ühe või mitu üksust.
  • pop () : eemaldab ja tagastab virna ülemise üksuse.
  • peek () : tagastab virna ülemise üksuse.
  • isEmpty () : naaseb, Truekui virn on tühi, Falsemuidu.
  • selge () : eemaldab virnast kõik üksused.
  • size () : tagastab virna pikkuse.

Virna loomine

Klassikaline lähenemine

Rakendame virna, näiteks selle rakendamist muudes keeltes peale JavaScripti.

Üksuste jälgimiseks kasutame massiivi ja lisamuutujat .

function Stack(){ var items = []; var top = 0; //other methods go here }

Lükake üksus virnasse

//Push an item in the Stackthis.push = function(element){ items[top++] = element } //top++, first performs the operation then increment's the value

Hüppa üksus virnast

//Pop an item from the Stackthis.pop = function(){ return items[--top]; } //--top, first decrements the value then performs the operation

Vaadake virna ülemist eset

//peek an item in the Stackthis.peek = function(){ return items[top - 1]; }

Kontrollige, kas virn on tühi

//Is stack emptythis.isEmpty = function(){ return top === 0; }

Kustutage virn

//clear the stackthis.clear= function(){ top = 0; }

Virna suurus

//Size of the Stackthis.size = function(){ return top; }

Stacki täielik rakendamine

function Stack(){ var items = []; var top = 0; //other methods go here 
 //Push an item in the Stack this.push = function(element){ items[top++] = element } //top++, first performs the operation then increment's the value 
 //Pop an item from the Stack this.pop = function(){ return items[--top]; } //--top, first decrements the value then performs the operation 
 //Peek top item of the Stack this.peek = function(){ return items[top - 1]; } 
 //Is Stack empty this.isEmpty = function(){ return top === 0; } 
 //Clear the Stack this.clear = function(){ top = 0; } 
 //Size of the Stack this.size = function(){ return top; }
}

Näide

Loome nüüd uue rakenduse eksemplari ja kontrollime, kas see töötab õigesti.

var stack = new Stack(); //creating new instance of Stack stack.push(1); stack.push(2); stack.push(3); console.log(stack.peek()); console.log(stack.isEmpty()); console.log(stack.size()); console.log(stack.pop()); console.log(stack.size()); stack.clear(); console.log(stack.isEmpty()); 
Output: 3 false 3 3 2 true

Virna juurutamine JavaScripti abil

Rakendame virna JavaScripti massiiviga, millel on sisseehitatud meetodid nagu push ja pop.

function Stack(){ var items = []; //other methods go here }

Lükake üksus virnasse

//push an item in the Stackthis.push = function(element){ items.push(element); }

Hüppa üksus virnast

//Pop an item from the Stackthis.pop = function(){ return items.pop(); }

Vaadake virna ülemist eset

//Peek top item of the Stackthis.peek = function(){ return items[items.length - 1]; }

Kontrollige, kas virn on tühi

//Is Stack emptythis.isEmpty = function(){ return items.length === 0; }

Kustutage virn

//Clear the Stackthis.clear = function(){ items.length = 0; }

Virna suurus

//Size of the Stackthis.size = function(){ return items.length; }

Stacki täielik rakendamine

function Stack(){ var items = []; //other methods go here 
 //Push a item in the Stack this.push = function(element){ items.push(element); } 
 //Pop a item from the Stack this.pop = function(){ return items.pop(); } 
 //Peek top item of the Stack this.peek = function(){ return items[items.length - 1]; }
 //Is Stack empty this.isEmpty = function(){ return items.length === 0; } 
 //Clear the Stack this.clear = function(){ items.length = 0; } 
 //Size of the Stack this.size = function(){ return items.length; } 
}

Atribuutide ja meetodite privaatseks muutmine sulgemise ja IIFE (kohese funktsiooni avaldise) abil.

var Stack = (function () { return function Stack(){ var items = []; //other methods go here 
 //Push an item in the Stack this.push = function(element){ items.push(element); } 
 //Pop an item from the Stack this.pop = function(){ return items.pop(); } 
 //Peek top item from the Stack this.peek = function(){ return items[items.length - 1]; } 
 //Is Stack empty this.isEmpty = function(){ return items.length === 0; } 
 //Clear the Stack this.clear = function(){ items.length = 0; } //Size of the Stack this.size = function(){ return items.length; } }})();

Virnastamine ES6 abil.

class Stack{ constructor(){ this.items = []; } //other methods go here //Push an item in the Stack push = function(element){ this.items.push(element); }
//Pop an item from the Stack pop = function(){ return this.items.pop(); } //Peek top item from the Stack peek = function(){ return this.items[this.items.length - 1]; }
//Is Stack empty isEmpty = function(){ return this.items.length === 0; }
//Clear the Stack clear = function(){ this.items.length = 0; } //Size of the Stack size = function(){ return this.items.length; }}

Virnastamine, kasutades ES6 WeakMap.

const items = new WeakMap();class Stack{ constructor(){ items.set(this, []); } //other methods go here //Push an item in the Stack push = function(element){ let temp = items.get(this); temp.push(element); }
//Pop an item from the Stack pop = function(){ let temp = items.get(this); return temp.pop(); } //Peek top item from the Stack peek = function(){ let temp = items.get(this); return temp[temp.length - 1]; }
//Is Stack empty isEmpty = function(){ let temp = items.get(this); return temp.length === 0; }
//Clear the Stack clear = function(){ let temp = items.get(this); temp.length = 0; } //Size of the Stack size = function(){ let temp = items.get(this); return temp.length; }}

Atribuutide ja meetodite privaatseks muutmine sulgemise ja IIFE (kohe kutsutud funktsiooni avaldise) abil virnale, kasutades ES6 WeakMapi.

let Stack = (() => { const items = new WeakMap(); return class Stack{ constructor(){ items.set(this, []); }
//other methods go here //Push an item in the Stack push = function(element){ let temp = items.get(this); temp.push(element); }
//Pop an item from the Stack pop = function(){ let temp = items.get(this); return temp.pop(); }
//Peek top item from the Stack peek = function(){ let temp = items.get(this); return temp[temp.length - 1]; }
//Is Stack empty isEmpty = function(){ let temp = items.get(this); return temp.length === 0; }
//Clear the Stack clear = function(){ let temp = items.get(this); temp.length = 0; }
//Size of the Stack size = function(){ let temp = items.get(this); return temp.length; } }})();

Aja keerukus

# Keskmine

Juurdepääs: Θ (N)

Otsing: Θ (N)

Sisesta: Θ (1)

Kustuta: Θ (1)

# Halvim

Juurdepääs: O (N)

Otsing: O (N)

Sisesta: O (1)

Kustuta: O (1)

Ruumi keerukus

# Halvim : O (N)

Stack võib olla lahenduse jaoks vajalik täiuslik andmestruktuur, kus on palju probleeme.

  • Baasmuunduri algoritm
  • Tasakaalustatud sulgud

Kui teile see artikkel meeldis, siis andke see? Ja jagage seda! Kui teil on sellega seotud küsimusi, küsige minult.

Selliste ja algoritmiliste lahenduste saamiseks Javascriptis jälgige mind Twitteris . Ma kirjutada ES6 reageerima, Nodejs, andmestruktuurid ja algoritmid learnersbucket.com .