function Stack() {
let items = [];
this.push = function(element) {
items.push(element);
};
this.pop = function() {
return items.pop();
};
this.peek = function() {
return items[items.length - 1];
};
this.isEmpty = function() {
return items.length === 0;
};
}
const stack = new Stack();
stack.push(5);
stack.push(8);
console.log(stack.peek());
console.log(stack.pop());
console.log(stack.pop());
console.log(stack.isEmpty());
在上面的示例中,我們定義了一個Stack類用于模擬堆棧行為。我們使用數組來保存元素并實現push()、pop()、peek()和isEmpty()方法。
使用堆棧解決問題:
使用堆棧可以解決許多的問題。比如在括號匹配問題中,我們可以使用堆棧來判斷一個字符串中的括號是否匹配。我們可以通過遍歷整個字符串,當遇到左括號時將其推入堆棧,當遇到右括號時則將堆棧頂部元素彈出。如果左右括號匹配,則繼續遍歷,如果不匹配,則說明字符串無效。
代碼示例:function parenthesisChecker(str) {
const stack = new Stack();
for (let i = 0; i< str.length; i++) {
let character = str[i];
if (character === '(' || character === '[' || character === '{') {
stack.push(character);
} else if (character === ')' || character === ']' || character === '}') {
if (stack.isEmpty()) {
return false;
}
let top = stack.pop();
if ((character === ')' && top !== '(') ||
(character === ']' && top !== '[') ||
(character === '}' && top !== '{')) {
return false;
}
}
}
return stack.isEmpty();
}
console.log(parenthesisChecker('()[]{}')); // true
console.log(parenthesisChecker('([{]})')); // false
在上面的示例中,我們使用了Stack類來模擬堆棧。我們遍歷輸入字符串中的每個字符,當遇到左括號時將其推入堆棧中,當遇到右括號時彈出堆棧頂部元素并與右括號比較,如果不匹配則返回false,否則繼續遍歷。如果遍歷完成后堆棧為空,則說明字符串中的括號匹配。
結論:
JavaScript堆棧是非常重要的編程概念,它可以在函數調用以及錯誤處理等方面提供幫助。通過使用堆棧,開發者可以更好地管理程序的運行時數據,并解決許多常見的問題。