摘要:本教程将向您介绍 JavaScript 堆栈数据结构,并向您展示如何使用数组作为堆栈。
堆栈数据结构简介
堆栈是一种数据结构,用于保存元素列表。堆栈根据 LIFO 原则工作,即后进先出,这意味着最近添加的元素是第一个被移除的元素。
堆栈有两个主要操作,它们只发生在堆栈的顶部:push 和 pop。push 操作将元素放置在堆栈的顶部,而 pop 操作从堆栈的顶部移除元素。

名称 堆栈 来自对一组物理项目的类比,例如 DVD 光盘和书籍,它们彼此叠放在一起。
堆栈有很多应用。例如,最简单的一个是反转单词。要做到这一点,您可以将单词逐个字母地压入堆栈,然后从堆栈中弹出字母。
堆栈的其他应用是文本编辑器中的“撤消”机制、语法解析、函数 调用和表达式转换(中缀到后缀、中缀到前缀、后缀到中缀和前缀到中缀)。
JavaScript 数组 类型提供了 push()
和 pop()
方法,允许您使用数组作为堆栈。
push() 方法
push()
方法允许您向数组末尾添加一个或多个元素。push()
方法返回 length
属性的值,该属性指定数组中元素的数量。
如果您将数组视为堆栈,push()
方法会将一个或多个元素添加到堆栈顶部。以下示例创建一个名为 stack
的空数组,并将五个数字一个接一个地添加到 stack
数组末尾。这就像将每个数字推入堆栈顶部。
let stack = [];
stack.push(1);
console.log(stack); // [1]
stack.push(2);
console.log(stack); // [1,2]
stack.push(3);
console.log(stack); // [1,2,3]
stack.push(4);
console.log(stack); // [1,2,3,4]
stack.push(5);
console.log(stack); // [1,2,3,4,5]
Code language: JavaScript (javascript)
下图说明了上述脚本中的每个步骤。

最初,堆栈是空的。每次我们调用 push()
方法将一个数字添加到堆栈中。经过 5 次调用后,堆栈有 5 个元素。
请注意,push()
方法还允许您一次将多个项目添加到数组末尾。
pop() 方法
pop()
方法删除数组末尾的元素,并将该元素返回给调用方。如果数组为空,pop()
方法将返回 undefined。
以下示例展示了如何使用 pop()
方法从堆栈顶部弹出元素。
console.log(stack.pop()); // 5
console.log(stack); // [1,2,3,4];
console.log(stack.pop()); // 4
console.log(stack); // [1,2,3];
console.log(stack.pop()); // 3
console.log(stack); // [1,2];
console.log(stack.pop()); // 2
console.log(stack); // [1];
console.log(stack.pop()); // 1
console.log(stack); // []; -> empty
console.log(stack.pop()); // undefined
Code language: JavaScript (javascript)
下图说明了脚本中的每个步骤。

最初,堆栈有 5 个元素。pop()
方法一次删除数组末尾的元素,即堆栈顶部的元素。经过五个操作后,堆栈为空。
使用 JavaScript 堆栈反转字符串
以下示例向您展示了如何使用堆栈反转字符串。
function reverse(str) {
let stack = [];
// push letter into stack
for (let i = 0; i < str.length; i++) {
stack.push(str[i]);
}
// pop letter from the stack
let reverseStr = '';
while (stack.length > 0) {
reverseStr += stack.pop();
}
return reverseStr;
}
console.log(reverse('JavaScript Stack')); //kcatS tpircSavaJ
Code language: JavaScript (javascript)
脚本的工作原理。
reverse()
函数接受一个字符串参数,并返回其反转版本,其逻辑如下
- 首先,循环遍历
str
并将每个字母推入stack
数组。 - 其次,从堆栈中弹出每个字母,并构造反转后的字符串。
在本教程中,我们向您展示了如何使用数组作为 JavaScript 堆栈数据结构,该结构有两个主要操作:push 和 pop。