当前位置:首页 > JavaScript

js 实现堆栈

2026-03-14 23:14:11JavaScript

堆栈的基本概念

堆栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。主要操作包括:

js 实现堆栈

  • push:将元素压入栈顶。
  • pop:移除并返回栈顶元素。
  • peek:返回栈顶元素但不移除。
  • isEmpty:检查栈是否为空。
  • size:返回栈中元素数量。

使用数组实现堆栈

数组是 JavaScript 中实现堆栈的简单方式,利用原生方法如 pushpop 即可完成核心操作。

js 实现堆栈

class Stack {
  constructor() {
    this.items = [];
  }

  push(element) {
    this.items.push(element);
  }

  pop() {
    if (this.isEmpty()) return "Stack is empty";
    return this.items.pop();
  }

  peek() {
    if (this.isEmpty()) return "Stack is empty";
    return this.items[this.items.length - 1];
  }

  isEmpty() {
    return this.items.length === 0;
  }

  size() {
    return this.items.length;
  }

  clear() {
    this.items = [];
  }
}

// 示例用法
const stack = new Stack();
stack.push(10);
stack.push(20);
console.log(stack.pop()); // 输出 20
console.log(stack.peek()); // 输出 10

使用对象实现堆栈

对象实现方式通过维护索引和键值对来优化性能(避免数组的 shift/unshift 开销)。

class Stack {
  constructor() {
    this.count = 0;
    this.items = {};
  }

  push(element) {
    this.items[this.count] = element;
    this.count++;
  }

  pop() {
    if (this.isEmpty()) return "Stack is empty";
    this.count--;
    const result = this.items[this.count];
    delete this.items[this.count];
    return result;
  }

  peek() {
    if (this.isEmpty()) return "Stack is empty";
    return this.items[this.count - 1];
  }

  isEmpty() {
    return this.count === 0;
  }

  size() {
    return this.count;
  }

  clear() {
    this.items = {};
    this.count = 0;
  }
}

注意事项

  1. 边界处理poppeek 需检查栈是否为空,避免操作未定义元素。
  2. 性能选择:数组实现简单,但对象实现更适合频繁的动态操作。
  3. 扩展功能:可添加 toString 方法或迭代器支持遍历。

实际应用场景

  • 函数调用栈:JavaScript 引擎使用堆栈管理函数执行上下文。
  • 撤销操作:文本编辑器通过堆栈记录操作历史。
  • 括号匹配:利用堆栈检查代码中的括号是否成对。

通过上述方法,可灵活实现堆栈以适应不同需求。

标签: 堆栈js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现求导

js实现求导

实现数值求导的方法 在JavaScript中实现求导通常采用数值方法,因为JavaScript不是符号计算语言。以下是常见的数值微分方法: 中心差分法 中心差分法提供较高精度的导数近似: func…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…