当前位置:首页 > JavaScript

js实现栈

2026-04-04 02:21:15JavaScript

实现栈的基本结构

在JavaScript中,栈可以通过数组或链表实现。数组实现更简单直观,适合大多数场景。

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

核心方法实现

push方法:添加元素到栈顶

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

pop方法:移除并返回栈顶元素

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

peek方法:查看栈顶元素但不移除

peek() {
  return this.items[this.items.length - 1];
}

辅助方法实现

isEmpty方法:检查栈是否为空

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

size方法:获取栈中元素数量

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

clear方法:清空栈

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

完整实现示例

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 = [];
  }

  print() {
    console.log(this.items.toString());
  }
}

使用示例

const stack = new Stack();
stack.push(10);
stack.push(20);
stack.push(30);
stack.print(); // 10,20,30
console.log(stack.pop()); // 30
console.log(stack.peek()); // 20
console.log(stack.size()); // 2
stack.clear();
console.log(stack.isEmpty()); // true

时间复杂度分析

  • push操作:O(1)
  • pop操作:O(1)
  • peek操作:O(1)
  • size操作:O(1)
  • isEmpty操作:O(1)

链表实现方案

对于需要频繁动态扩容的场景,可以考虑链表实现:

js实现栈

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;
  }
}

标签: js
分享给朋友:

相关文章

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…