当前位置:首页 > JavaScript

js 栈实现

2026-04-07 03:37:55JavaScript

栈的基本概念

栈(Stack)是一种遵循后进先出(LIFO)原则的线性数据结构。主要操作包括入栈(push)、出栈(pop)、查看栈顶元素(peek)和判断栈是否为空。

JavaScript 栈的实现

JavaScript 中可以通过数组或链表实现栈。以下是基于数组的栈实现代码示例:

js 栈实现

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

  // 入栈
  push(element) {
    this.items.push(element);
  }

  // 出栈
  pop() {
    if (this.isEmpty()) {
      return "栈为空";
    }
    return this.items.pop();
  }

  // 查看栈顶元素
  peek() {
    if (this.isEmpty()) {
      return "栈为空";
    }
    return this.items[this.items.length - 1];
  }

  // 判断栈是否为空
  isEmpty() {
    return this.items.length === 0;
  }

  // 返回栈的大小
  size() {
    return this.items.length;
  }

  // 清空栈
  clear() {
    this.items = [];
  }

  // 打印栈内容
  print() {
    console.log(this.items.toString());
  }
}

栈的使用示例

const stack = new Stack();
stack.push(10);
stack.push(20);
stack.push(30);

stack.print(); // 输出: 10,20,30
console.log(stack.pop()); // 输出: 30
console.log(stack.peek()); // 输出: 20
console.log(stack.size()); // 输出: 2

栈的应用场景

  • 函数调用栈
  • 表达式求值(如括号匹配)
  • 浏览器历史记录(前进/后退)
  • 撤销操作(Undo/Redo)

时间复杂度分析

  • 入栈(push):O(1)
  • 出栈(pop):O(1)
  • 查看栈顶(peek):O(1)
  • 判断空栈(isEmpty):O(1)

注意事项

  • JavaScript 数组本身已提供类似栈的操作(push/pop),直接使用数组也可实现栈功能。
  • 对于大规模数据,需注意数组实现的栈可能存在内存连续性问题,链表实现更适合动态扩容场景。

标签: js
分享给朋友:

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…