当前位置:首页 > JavaScript

js实现栈

2026-04-04 02:21:15JavaScript

实现栈的基本结构

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

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

核心方法实现

push方法:添加元素到栈顶

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

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

js实现栈

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

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

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

辅助方法实现

isEmpty方法:检查栈是否为空

js实现栈

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)

链表实现方案

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

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 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现拖拽

js实现拖拽

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

js实现图片预览

js实现图片预览

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

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现tab选项卡切换

js实现tab选项卡切换

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