当前位置:首页 > JavaScript

js堆栈实现

2026-04-06 03:08:43JavaScript

堆栈的基本概念

堆栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。主要操作包括压栈(push)和弹栈(pop),还可以包含查看栈顶元素(peek)等辅助操作。

数组实现堆栈

使用数组实现堆栈是最直观的方式,通过维护一个指针(如top)来跟踪栈顶位置。

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

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

  pop() {
    if (this.isEmpty()) return "Underflow";
    return this.items.pop();
  }

  peek() {
    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

链表实现堆栈

链表实现的堆栈在动态内存分配方面更灵活,每个节点包含数据和指向下一个节点的指针。

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 value = this.top.value;
    this.top = this.top.next;
    this.size--;
    return value;
  }

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

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

  getSize() {
    return this.size;
  }
}

// 使用示例
const llStack = new LinkedListStack();
llStack.push(100);
llStack.push(200);
console.log(llStack.pop()); // 输出200

堆栈的应用场景

堆栈常用于需要回溯操作的场景,例如:

  • 浏览器历史记录(前进/后退功能)
  • 函数调用栈(执行上下文管理)
  • 括号匹配等语法检查
  • 深度优先搜索(DFS)算法

性能对比

数组实现的堆栈在JavaScript引擎中通常性能较好,因为数组操作经过高度优化。链表实现虽然理论上在某些操作上有优势,但实际在JavaScript中可能因对象创建开销而稍慢。

错误处理

实现时需要考虑边界条件,例如:

js堆栈实现

  • 空栈时调用pop()peek()
  • 栈大小限制(如有)时调用push()
// 增强错误处理的pop方法示例
pop() {
  if (this.isEmpty()) {
    throw new Error("Stack underflow: Cannot pop from empty stack");
  }
  return this.items.pop();
}

以上实现提供了堆栈的核心功能,可根据具体需求进行扩展,如添加迭代器、序列化等方法。

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

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let currentY…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…