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

yizhihongxing

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日

相关文章

  • Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用

    一、什么是jQuery Ajax? jQuery Ajax是一组用于处理Ajax请求的方法和函数。通过它可以实现异步获取数据和处理数据的功能,可以向服务器发送请求以及在不刷新页面的情况下接收来自服务器的响应数据,从而实现网页动态更新的效果。 二、向WebService发出请求,返回泛型集合数据的异步调用 在使用jQuery Ajax与Web Service交…

    JavaScript 2023年6月11日
    00
  • php实现paypal 授权登录

    下面我给出详细的步骤和示例说明: 1. 注册PayPal商家账户 首先,你需要注册一个PayPal商家账户并登录。进入 https://developer.paypal.com/ ,点击右上角“Dashboard”,进入主页面,在“REST API apps”中创建一个新应用。在应用创建完成后,你可以从应用设置中获得API密钥。 2. 引入PayPal SD…

    JavaScript 2023年6月11日
    00
  • Javascript中eval函数的使用方法与示例

    Javascript中eval函数的使用方法与示例 在 JavaScript 中,eval() 函数用于计算字符串中的 JavaScript 代码,并将其执行。以下是该函数的语法: eval(string) 其中,string 参数是包含要被计算的 JavaScript 代码的字符串。使用 eval() 函数时应谨慎,并确保输入的字符串是可信的,否则可能会发…

    JavaScript 2023年5月27日
    00
  • 基于JavaScript实现Json数据根据某个字段进行排序

    当需要对Json数据进行排序时,我们可以使用JavaScript来实现。下面是实现Json数据根据某个字段进行排序的完整攻略: 第一步:准备Json数据 首先我们需要准备一些Json数据,用于后续的排序操作。可以使用以下示例数据进行演示: [ { "name": "John", "age": 31,…

    JavaScript 2023年5月27日
    00
  • 基于js原生和ajax的get和post方法以及jsonp的原生写法实例

    了解您的要求后,我将详细讲解基于js原生和ajax的get和post方法以及jsonp的原生写法实例。具体攻略如下: 1. 基于JS原生的get方法 JS原生的get方法可以通过XMLHttpRequest对象来发送GET请求,以下是一个简单的示例代码。 function sendGetRequest(url, callback) { var xhr = n…

    JavaScript 2023年5月27日
    00
  • JavaScript中的Primitive对象封装介绍

    下面是“JavaScript中的Primitive对象封装介绍”的完整攻略。 什么是Primitive对象 JavaScript中存在两种数据类型:原始数据类型和引用数据类型。其中原始数据类型又称为Primitive类型,包括Number、String、Boolean、Null、Undefined和Symbol(ES6新增)。 Primitive对象是Jav…

    JavaScript 2023年5月27日
    00
  • JavaScript Event学习第七章 事件属性

    下面给你详细讲解 JavaScript Event 学习第七章 事件属性的完整攻略。 事件属性 事件属性是针对事件对象提供的属性,通过这些属性可以获取事件的各种信息。下面是常见的事件属性: 1. type type属性用于返回事件类型,是必需的。例如: element.addEventListener(‘click’, function(event) { c…

    JavaScript 2023年6月11日
    00
  • 使用JS正则表达式 替换括号,尖括号等

    使用JS正则表达式替换括号、尖括号等的完整攻略分为以下几个步骤: 定义正则表达式 使用replace()函数替换匹配到的字符串 将替换后的字符串返回 下面是两个示例说明: 示例一 我们要将以下HTML代码中的所有尖括号<、>用[]代替 <div class="container"> <h1>Welcom…

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