当前位置:首页 > JavaScript

js堆栈实现

2026-03-14 09:03:45JavaScript

堆栈的基本概念

堆栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。主要操作包括压栈(push)和弹栈(pop),其他常见操作有查看栈顶元素(peek)和判断是否为空(isEmpty)。

使用数组实现堆栈

数组实现堆栈简单直观,通过维护一个栈顶指针(或索引)来操作数据。

js堆栈实现

class Stack {
  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.size = 0;
  }

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

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

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

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

  getSize() {
    return this.size;
  }

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

堆栈的应用场景

堆栈常用于需要回溯或反转顺序的场景,例如:

js堆栈实现

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

性能比较

数组实现的堆栈在大多数现代JavaScript引擎中性能较好,因为数组操作经过高度优化。链表实现避免了数组的动态扩容开销,但在JavaScript中可能因对象创建和垃圾回收导致性能略低。实际选择取决于具体场景和性能测试结果。

扩展功能

可以基于基础堆栈实现扩展功能,例如:

  • 支持迭代的堆栈(实现Symbol.iterator)
  • 限制大小的堆栈(固定容量)
  • 双栈结构(用于特殊算法需求)
// 可迭代堆栈示例
class IterableStack extends Stack {
  [Symbol.iterator]() {
    let index = this.items.length - 1;
    return {
      next: () => ({
        value: this.items[index--],
        done: index < -1
      })
    };
  }
}

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

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

vue实现js休眠

vue实现js休眠

Vue 中实现 JavaScript 休眠 在 Vue 中实现 JavaScript 休眠通常需要使用异步方式,以避免阻塞主线程。以下是几种常见方法: 使用 setTimeout 和 Pro…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…