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避免嵌套代码浅析

    JavaScript的代码嵌套是我们在编程过程中经常会遇到的一个情况。虽然在语法上我们可以嵌套无数层代码,但实际上,嵌套层次过深会极大地影响代码的可读性和可维护性。这里我们就来浅析一下JavaScript如何避免嵌套代码的问题。 使用function 在JavaScript中,可以通过将一段代码封装到一个函数中来达到避免嵌套代码的目的。这样可以把复杂的代码逻…

    JavaScript 2023年6月10日
    00
  • 详解操作cookie的原生方法cookieStore

    下面是详解操作cookie的原生方法cookieStore的完整攻略。 一、什么是cookieStore cookieStore 是浏览器 JavaScript 运行时的一个 API,用来管理浏览器中所有的 cookie,可用于对 cookie 实现增删改查等操作。 二、cookieStore的基本使用方法 cookieStore API 可以使用在浏览器中…

    JavaScript 2023年6月11日
    00
  • JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符

    学习笔记4:JavaScript运算符和操作符 JavaScript中的运算符是用于执行各种数学和逻辑操作的符号。操作数可以是变量、常量、表达式或函数的结果。本文将带领读者掌握JavaScript中的基本运算符和操作符。 运算符 运算符是用于执行数学计算的符号,如加号、减号、乘号、除号、取余等。以下是JavaScript中常见的运算符: 算术运算符 运算符 …

    JavaScript 2023年5月18日
    00
  • 微信小程序(应用号)开发新闻客户端实例

    微信小程序(应用号)开发新闻客户端实例攻略 微信小程序是一种轻量级的应用程序,它可以在微信内直接运行,用户无需下载安装即可使用。开发微信小程序不需要具备专业的开发经验,只需要掌握一定的前端技能和一些框架知识即可。本攻略将详细介绍如何使用小程序开发新闻客户端。 1. 准备工作 在开始开发之前,需要注册微信小程序账号。具体步骤如下: 登录微信公众平台,选择“小程…

    JavaScript 2023年6月11日
    00
  • 一篇文章搞定iOS的Cookie存取

    一篇文章搞定iOS的Cookie存取 什么是Cookie Cookie是浏览器保存在客户端的一种数据,原本是为了解决HTTP协议无状态的问题而出现的。随着互联网技术的发展,Cookie的应用场景变得越来越广泛,现在已经成为了网站进行用户识别和状态管理的常见手段。 iOS中如何实现Cookie存取 iOS中要实现Cookie的存取,可以使用NSHTTPCook…

    JavaScript 2023年6月11日
    00
  • JavaScript 中的运算符和表达式介绍

    下面给你详细讲解一下“JavaScript 中的运算符和表达式介绍”的完整攻略。 运算符 在JavaScript中,运算符是用来进行各种数学和逻辑运算的符号。常见的运算符有以下几种。 算术运算符 算术运算符用于执行基本的数学运算,比如加、减、乘和除等。常用的算术运算符如下: 运算符 描述 + 加法 – 减法 * 乘法 / 除法 % 取余 ++ 自增 — 自…

    JavaScript 2023年5月17日
    00
  • layui在form表单页面通过Validform加入简单验证的方法

    当我们使用layui框架进行Web开发时,添加表单验证是必不可少的一项功能。layui可以与Validform插件集成使用,从而使我们的表单验证更加方便快捷。以下是实现这一功能的步骤: 第一步:引入必要的CSS和JS文件 首先需要在页面中引入layui和Validform的CSS和JS文件,可以使用CDN或下载到本地进行引入。示例代码如下: <!DOC…

    JavaScript 2023年6月10日
    00
  • vue3.0 router路由跳转传参问题(router.push)

    下面我详细讲解一下”Vue3.0 Router路由跳转传参问题(router.push)”的完整攻略。 1. 问题 在Vue3.0中使用Router进行路由跳转时,需要传递参数,但是参数传递的方式有很多,如何选择最合适的方式呢? 2. 解决方案 Vue3.0中使用Router进行路由跳转时,可以使用以下几种方式进行参数传递。 2.1 Query参数传递 使用…

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