使用数组实现 JavaScript 堆栈

2025年3月29日 | 阅读 5 分钟

在本节中,我们将学习如何使用 JavaScript 数组 实现栈。

什么是栈

一种数据结构,我们在其中按照后进先出(Last In First Out),即 LIFO 原则来放置元素。LIFO 原则意味着元素的排列方式是最近添加的元素最先被移除,而最初添加的元素最后被移除。你可以将栈中元素的排列方式理解为叠盘子,最先放上去的盘子最后使用。这种排列方式称为 LIFO。

栈包含两个主要函数:push()pop()。这两个栈操作都发生在栈顶。push() 操作用于将元素插入/添加到栈中,而 pop() 函数则用于从栈中移除/弹出元素。push() 和 pop() 操作发生在栈顶,因为在栈中,元素总是从顶部压入和弹出。

栈上的操作

对栈执行的操作如下:

  • push(): push() 操作用于将元素添加到栈中。
  • pop(): pop() 操作用于从栈中移除元素。
  • peek(): peek() 操作用于获取栈顶的元素。
  • length(): length() 操作用于返回栈的长度。
  • search(): search() 操作用于搜索栈中是否存在某个元素。
  • print(): print() 操作用于打印栈中的元素。
  • isEmpty(): isEmpty() 操作用于检查栈是否为空。

现在,我们将讨论栈的实现及其方法(如上所述)。

实现栈及其操作

为了实现栈数据结构,我们需要创建一个栈类,如下所示:

在上面的代码中

  1. 我们创建了一个名为 stck 的类。
  2. 在其内部,创建了一个构造函数,其中使用了两个属性:ele 和 top。ele 是将元素添加到栈中的数组元素,我们知道在栈中,元素是从栈顶添加的。因此,我们创建了一个 top 变量,它指向栈顶元素的索引。
  3. 这两个属性都通过 this 获取。'this' 关键字用于获取当前值。

push() 操作

用于将元素添加到栈顶位置的栈方法。

下面展示了一个理解 push() 方法用法的示例:

在上面的代码中

  1. 我们创建了一个名为 stackpush() 的函数,它带有一个参数 e。参数 e 将包含将被插入到栈中的值。
  2. 在函数内部,使用 this 将 e 的值赋给 ele 数组和 top。
  3. 现在,top 的值增加了 1,因为 top 变量需要指向栈中下一个空数组索引。

pop() 操作

Stack 的 pop() 方法用于从栈顶位置移除/删除元素。

下面是一个 stackpop() 操作的示例:

在上面的代码中

  1. 我们创建了一个 stackpop() 函数,其第一个步骤是将 top 的值减 1。这是因为 top 变量需要指向前一个元素的位置。
  2. 在下一步中,将使用此运算符弹出栈顶的值。

length() 操作

Stack 的 length() 操作用于使用 top 变量返回栈的长度。

下面是一个使用 length() 操作的示例:

在上面的代码中,我们创建了一个 stacklength() 函数,它将通过从栈顶计算来返回长度。

peek() 操作

用于获取栈顶值的栈操作。

下面是一个理解 peek() 函数实际实现的示例:

  1. 在上面的代码中,peek() 函数返回栈顶的元素。
  2. 我们使用 top - 1,因为 top 变量指向栈中添加元素的位置。

print() 操作

print() 操作用于打印栈中的元素。它类似于 C 语言中的 printf。

下面是一个展示 print() 操作实现的示例:

在上面的代码中

  1. 我们创建了一个 print() 函数,并在其中将一个变量 t 初始化为 top - 1 的值。
  2. 接下来,使用 while 循环打印栈中的所有值,从栈顶开始。
  3. 循环将从最后一个元素开始到栈顶,即到第 0 个索引。
  4. 每个数组索引的值将根据索引值打印。
  5. 最后,值递减 t--。

reverse() 操作

Stack 的 reverse() 操作用于反转栈的顺序,以便栈中的值以相反的顺序打印。

下面是一个解释 reverse() 函数实现的示例:

在上面的代码中

  1. 我们使用递归创建了一个 reverse() 函数。
  2. 在此之后,又创建了一个名为 rev() 的函数,它以 index 作为参数。
  3. 在 rev() 函数内部,我们使用了一个 if 语句,如果索引值不等于,则将计算反转后的栈元素。
  4. 最后,将打印反转后的栈元素。
  5. 以上是我们实际实现的一些栈方法。

综合代码实现

让我们来看一下带有不同操作的完整栈实现。下面展示了实现的示例:

你可以实现上面的代码并进行实际理解。