JS中的算法与数据结构之栈(Stack)实例详解

JS中的算法与数据结构之栈(Stack)实例详解

什么是栈?

栈(Stack)是一种遵从后进先出(LIFO)原则的有序集合,是一种线性数据结构,只允许在栈顶进行插入和删除操作。

如何实现栈?

JavaScript中可以通过数组来实现栈,使用数组的pop()、push()方法可以轻松地实现栈的相关操作。

创建一个栈(Stack)类

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

  // 添加元素到栈顶
  push(element) {
    this.items.push(element);
  }

  // 移除栈顶元素并返回
  pop() {
    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 = [];
  }
}

如何使用栈?

示例 1: 使用栈实现括号匹配

function bracketsMatch(str) {
  let stack = new Stack();
  let arr = str.split('');
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] == '(') {
      stack.push(arr[i]);
    } else if (arr[i] == ')') {
      if (stack.isEmpty()) {
        return false;
      } else {
        stack.pop();
      }
    }
  }
  return stack.isEmpty();
}

console.log(bracketsMatch('(a+b)*(c-d)')); // true
console.log(bracketsMatch('(a+b)*((c-d)')); // false

示例 2: 使用栈实现进制转换

function decimalToBinary(decimalNum) {
  let stack = new Stack();
  while (decimalNum > 0) {
    let remainder = decimalNum % 2;
    stack.push(remainder);
    decimalNum = Math.floor(decimalNum / 2);
  }
  let binaryStr = '';
  while (!stack.isEmpty()) {
    binaryStr += stack.pop().toString();
  }
  return binaryStr;
}

console.log(decimalToBinary(10)); // '1010'
console.log(decimalToBinary(23)); // '10111'

总结

栈是一种常用的数据结构,使用栈可以方便地实现多种算法和问题的解决方案。在JavaScript中可以通过数组来实现栈的相关操作,也可以通过递归等方式实现栈的应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中的算法与数据结构之栈(Stack)实例详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript Window窗口对象属性和使用方法

    JavaScript Window窗口对象属性和使用方法 JavaScript中的Window对象是浏览器窗口的根对象,可以通过Window对象来获取和操作窗口的各种属性和方法。 获取窗口属性 Window.innerHeight和Window.innerWidth属性 Window.innerHeight属性和Window.innerWidth属性分别用于…

    JavaScript 2023年5月27日
    00
  • js同源策略详解

    JS同源策略详解:什么是同源? 在网站开发中,我们常常会遇到 JS 同源策略,那么什么是同源?为什么同源策略这么重要?这篇文章将为你一一解答。 同源(Same-origin)是由同一个协议(protocol)、主机名(host)和端口号(port)组成,若三者相同,则是同源。例如: https://www.example.com 和 https://www.…

    JavaScript 2023年6月11日
    00
  • Iframe跨窗口通信原理详解

    Iframe跨窗口通信原理详解 什么是Iframe? Iframe又被称为内嵌框架,是一种可以将另一个HTML文档嵌入到当前HTML文档的标记。它可以将不同的网页嵌到同一个网页上,使得网页具有嵌套性。 Iframe的跨窗口通信原理 Iframe内部的网页区域和外部的网页区域是完全隔离的,就算是运行在同一个主域名下,它们之间也无法直接通讯。对此,Iframe提…

    JavaScript 2023年6月11日
    00
  • 超级给力的JavaScript的React框架入门教程

    关于“超级给力的JavaScript的React框架入门教程”的完整攻略,我会分别从如下几个方面进行详细讲解: React框架介绍 React开发环境的搭建和基础语法 React组件的概念和使用方法 React项目的构建和部署 案例实战1:TodoList应用的开发 案例实战2:电影搜索应用的开发 1. React框架介绍 React是一个由Facebook…

    JavaScript 2023年5月19日
    00
  • 优化javascript的执行效率一些方法总结

    优化Javascript的执行效率一些方法总结 Javascript在前端开发中扮演着重要的角色,但是在开发过程中,经常会遇到Javascript代码执行效率较差的情况。以下是优化Javascript执行效率的一些方法总结。 1. 减少DOM操作 DOM操作是非常消耗性能的,每次变更都会让浏览器重新计算一次布局和绘制,因此尽量少的执行DOM操作可以提升代码的…

    JavaScript 2023年6月10日
    00
  • 详谈表单格式化插件jquery.serializeJSON

    下面是关于详谈表单格式化插件jquery.serializeJSON的完整攻略。 什么是jquery.serializeJSON插件? jquery.serializeJSON插件是一个可以将表单数据转换为JSON格式的jQuery插件。在提交表单时,我们经常需要将表单数据打包成JSON格式进行传输。因此,这个插件可以帮助我们快速、便捷地实现这个功能。 插件…

    JavaScript 2023年5月27日
    00
  • JavaScript实现简单的文本逐字打印效果示例

    让我来讲解一下“JavaScript实现简单的文本逐字打印效果示例”的完整攻略。 1. 思路分析 要实现文本逐字打印效果,我们首先要思考实现的思路。一种可行的思路如下: 定义一个文本框用于展示要逐字打印的文字内容。 定义一个数组,将要逐字打印的文字内容存入这个数组中。 定义一个计数器,记录已经打印的字数。 定义一个定时器,每隔一段时间(如100毫秒)输出一个…

    JavaScript 2023年5月28日
    00
  • js实现随机抽奖

    下面是js实现随机抽奖的完整攻略: 目录 背景介绍 随机抽奖原理 实现过程 准备工作 代码逻辑 示例说明 示例一:随机抽取一名幸运儿 示例二:抽奖动画效果 背景介绍 随机抽奖是常见的一个功能,例如网站活动、抽奖游戏、公益机构等都有可能需要使用到此功能。本文将详细介绍如何使用JavaScript实现随机抽奖的功能。 随机抽奖原理 随机抽奖的实现原理比较简单,例…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部