使用数组实现 JavaScript 堆栈

摘要:本教程将向您介绍 JavaScript 堆栈数据结构,并向您展示如何使用数组作为堆栈。

堆栈数据结构简介

堆栈是一种数据结构,用于保存元素列表。堆栈根据 LIFO 原则工作,即后进先出,这意味着最近添加的元素是第一个被移除的元素。

堆栈有两个主要操作,它们只发生在堆栈的顶部:push 和 pop。push 操作将元素放置在堆栈的顶部,而 pop 操作从堆栈的顶部移除元素。

JavaScript Stack: A Stack of books analogy

名称 堆栈 来自对一组物理项目的类比,例如 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)

下图说明了上述脚本中的每个步骤。

JavaScript Stack Push Operations

最初,堆栈是空的。每次我们调用 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()); //  undefinedCode language: JavaScript (javascript)

下图说明了脚本中的每个步骤。

JavaScrippt Stack Pop

最初,堆栈有 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 tpircSavaJCode language: JavaScript (javascript)

脚本的工作原理。

reverse() 函数接受一个字符串参数,并返回其反转版本,其逻辑如下

  1. 首先,循环遍历 str 并将每个字母推入 stack 数组。
  2. 其次,从堆栈中弹出每个字母,并构造反转后的字符串。

在本教程中,我们向您展示了如何使用数组作为 JavaScript 堆栈数据结构,该结构有两个主要操作:push 和 pop。

本教程对您有帮助吗?