当前位置:首页 > JavaScript

js 栈实现

2026-03-15 10:08:11JavaScript

栈的基本概念

栈是一种遵循后进先出(LIFO)原则的数据结构,仅允许在栈顶进行插入(压栈)和删除(弹栈)操作。JavaScript中可通过数组或链表实现栈。

js 栈实现

基于数组的栈实现

数组的pushpop方法天然适合栈操作:

js 栈实现

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

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

  // 弹栈
  pop() {
    if (this.isEmpty()) return null;
    return this.items.pop();
  }

  // 查看栈顶
  peek() {
    if (this.isEmpty()) return null;
    return this.items[this.items.length - 1];
  }

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

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

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

基于链表的栈实现

链表实现的栈需维护头节点作为栈顶:

class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

class LinkedListStack {
  constructor() {
    this.top = null;
    this.length = 0;
  }

  push(value) {
    const newNode = new Node(value);
    newNode.next = this.top;
    this.top = newNode;
    this.length++;
  }

  pop() {
    if (this.isEmpty()) return null;
    const value = this.top.value;
    this.top = this.top.next;
    this.length--;
    return value;
  }

  peek() {
    if (this.isEmpty()) return null;
    return this.top.value;
  }

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

  size() {
    return this.length;
  }

  clear() {
    this.top = null;
    this.length = 0;
  }
}

性能对比

  • 数组栈:操作时间复杂度为O(1),但可能触发动态数组扩容。
  • 链表栈:无扩容问题,但每个节点需额外存储指针,内存开销略大。

应用场景

  • 函数调用栈
  • 浏览器历史记录(后退功能)
  • 括号匹配等算法问题

可根据实际需求选择数组或链表实现。数组实现更简洁,链表实现适合频繁动态变化的场景。

标签: js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

js实现防洪

js实现防洪

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

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…

js 实现全屏

js 实现全屏

使用 requestFullscreen 方法 通过调用元素的 requestFullscreen 方法可以实现全屏。该方法兼容现代浏览器,但不同浏览器可能需要前缀。 const element =…