Bardzo, bardzo prosta implementacja stosu plus ćwiczenie – odwróć napis używając stosu. Do dzieła.
Stos:
class Stack {
constructor(){
this.elements = [];
}
push(element){
this.elements.push(element)
}
pop(){
if(this.elements.length === 0) return "Underflow situation";
else return this.elements.pop();
}
isEmpty(){
if(this.elements.length > 0) return false;
else return true;
}
}
Odwracanie:
function reverse(str){
let stack = new Stack();
let i = 0;
let reversedStr = "";
while (i !== str.length) {
stack.push(str.charAt(i));
i++;
}
while (!stack.isEmpty()) {
reversedStr += stack.pop();
}
return reversedStr;
}
console.log(reverse("hello world"));
Logika taka, że to co ląduje na stosie jako pierwsze, zleci z niego jako ostatnie. Zatem ostatnia litera jest pierwszą, która ze stosu spadnie.
Swoją drogą klasa wzięta z internetu, odrobinę ją sobie poprawimy:
class Stack {
constructor(){
this.elements = [];
}
push(element){
this.elements.push(element)
}
pop(){
if(this.elements.length > 0)
return this.elements.pop();
}
isEmpty(){
return this.elements.length === 0;
}
}
To tylko dla zobrazowania jak działa stos, bo funkcjonalność stosu (czyli to co wpadło ostatnie spada pierwsze, to co wpadło pierwsze spada ostatnie) możemy osiągnąć za pomocą listy oraz metod push i pop:
function reverse(str){
let stack = [];
let i = 0;
let reversedStr = "";
while (i !== str.length) {
stack.push(str.charAt(i));
i++;
}
while (stack.length > 0) {
reversedStr += stack.pop();
}
return reversedStr;
}
console.log(reverse("hello world!"));
//!dlrow olleh