当前位置:首页 > JavaScript

js堆栈实现

2026-04-06 03:08:43JavaScript

堆栈的基本概念

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

数组实现堆栈

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

js堆栈实现

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

堆栈的应用场景

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

js堆栈实现

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

性能对比

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

错误处理

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

  • 空栈时调用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实现倒计时

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

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…