当前位置:首页 > JavaScript

js实现栈

2026-01-30 10:44:56JavaScript

栈的基本概念

栈是一种遵循后进先出(LIFO)原则的数据结构。元素的添加和移除只能在栈顶进行。常见操作包括压栈(push)、弹栈(pop)、查看栈顶元素(peek)以及检查栈是否为空。

基于数组的实现

使用数组可以简单高效地实现栈结构。数组的末尾作为栈顶,pushpop操作的时间复杂度均为O(1)。

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

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

  pop() {
    if (this.isEmpty()) {
      return "Stack is empty";
    }
    return this.items.pop();
  }

  peek() {
    if (this.isEmpty()) {
      return "Stack is empty";
    }
    return this.items[this.items.length - 1];
  }

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

  size() {
    return this.items.length;
  }

  clear() {
    this.items = [];
  }
}

基于对象的实现

对于需要更严格控制内存的场景,可以使用对象来存储栈元素,并通过变量跟踪栈顶位置。

class Stack {
  constructor() {
    this.count = 0;
    this.items = {};
  }

  push(element) {
    this.items[this.count] = element;
    this.count++;
  }

  pop() {
    if (this.isEmpty()) {
      return "Stack is empty";
    }
    this.count--;
    const result = this.items[this.count];
    delete this.items[this.count];
    return result;
  }

  peek() {
    if (this.isEmpty()) {
      return "Stack is empty";
    }
    return this.items[this.count - 1];
  }

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

  size() {
    return this.count;
  }

  clear() {
    this.items = {};
    this.count = 0;
  }
}

栈的应用示例

栈在算法中有广泛应用,例如括号匹配、表达式求值、函数调用栈等。以下是一个括号匹配的示例:

js实现栈

function isBalanced(expression) {
  const stack = new Stack();
  const brackets = { "(": ")", "{": "}", "[": "]" };

  for (let char of expression) {
    if (brackets[char]) {
      stack.push(char);
    } else if (char === ")" || char === "}" || char === "]") {
      if (stack.isEmpty() || brackets[stack.pop()] !== char) {
        return false;
      }
    }
  }
  return stack.isEmpty();
}

性能考虑

数组实现的栈在大多数JavaScript引擎中性能较好,因为数组操作经过高度优化。对象实现适合需要精确控制内存的场景,但可能牺牲部分性能。选择实现方式时应根据具体需求权衡。

标签: js
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…