JavaScript数据结构之栈实例用法

JavaScript数据结构之栈实例用法

本文将会介绍栈在JavaScript中的实例用法以及栈作为一种数据结构的基本概念。

栈的定义

栈是一种遵从后进先出(LIFO)原则的有序集合。新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端称作栈底,不含任何元素的栈称为空栈

栈的应用场景

栈其应用场景是非常广泛的。在现实世界中,许多普通的场景都可以使用栈作为一个基本数据结构来解决。比如:

  • 撤销、恢复操作
  • 浏览器历史记录
  • 实现编译器中的语法分析等

JavaScript中栈的实现

JavaScript是一种可以动态扩展数组的语言,因此我们可以使用数组来实现栈。在JavaScript中,我们可以使用以下方式来实现一个栈:

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

我们可以使用es6的class语法来创建一个stack类,其中此类主要有以下方法:

  • push:添加一个元素到栈顶
  • pop:移除栈顶的元素并返回该元素
  • peek:返回栈顶的元素,但不移除它
  • isEmpty:如果栈里没有任何元素就返回true,否则返回false
  • size:返回栈里的元素个数
  • clear:移除栈里的所有元素

栈的实例用法

示例1:括号匹配

在括号匹配的场景中,将所有的左括号(如“(”、“{”、“[”等)入栈,当我们遇到右括号(如“)”、“}”、“]”等)时,我们将会从栈中弹出相应的左括号,并检查两者是否匹配。如果这两个括号不匹配,那么我们就发现了一个不正确的字符串。

以下是使用stack类来实现的代码:

function isBracketMatching(str) {
  const stack = new Stack();

  for (let i = 0; i < str.length; i++) {
    const bracket = str.charAt(i);

    if (bracket === '(' || bracket === '{' || bracket === '[') {
      stack.push(bracket);
    } else if (bracket === ')' && stack.peek() === '(') {
      stack.pop();
    } else if (bracket === '}' && stack.peek() === '{') {
      stack.pop();
    } else if (bracket === ']' && stack.peek() === '[') {
      stack.pop();
    } else {
      return false;
    }
  }

  return stack.isEmpty();
}

console.log(isBracketMatching('(()){}[[]]')); // true
console.log(isBracketMatching('([)])')); // false
console.log(isBracketMatching('(((((((')); // false

以上面的代码为例,我们先定义了一个isBracketMatching函数,该函数接受一个字符串参数,判断该字符串中的括号是否匹配。我们创建一个新的stack对象,然后开始迭代这个字符串中的每一个字符。如果这个字符是一个左括号,我们把它放在栈顶。如果这个字符是一个右括号,我们将会检查栈顶元素是否匹配。如果匹配,我们就弹出栈顶元素。最后,如果所有的括号都已被匹配,那么栈里的元素将会全部被弹出,函数就会返回true。

示例2:进制转换

进制转换也是栈的经典应用场景之一。假设我们需要把一个数字从十进制转换成二进制。我们可以使用以下算法来实现:

function decimalToBinary(decimalNum) {
  const stack = new Stack();
  let binaryStr = '';

  while (decimalNum > 0) {
    const binaryDigit = decimalNum % 2;
    decimalNum = Math.floor(decimalNum / 2);
    stack.push(binaryDigit);
  }

  while (!stack.isEmpty()) {
    binaryStr += stack.pop().toString();
  }

  return binaryStr;
}

console.log(decimalToBinary(10)); // 1010
console.log(decimalToBinary(100)); // 1100100
console.log(decimalToBinary(1000)); // 1111101000

我们定义了一个名为decimalToBinary的函数,它接受一个十进制数字作为参数,然后使用乘以2和取余数的方式来计算这个数字的二进制表示。然后,我们可以将每一个计算得到的0或1入栈,直到数字变成了0为止。最后,我们弹出栈中得到的每一个0或1,将它们组合成一个字符串,这就是这个数字的二进制表示。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript数据结构之栈实例用法 - Python技术站

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

相关文章

  • 【牛客小白月赛69】题解与分析A-F【蛋挞】【玩具】【开题顺序】【旅游】【等腰三角形(easy)】【等腰三角形(hard)】

    比赛传送门:https://ac.nowcoder.com/acm/contest/52441 感觉整体难度有点偏大。 ? 作者:Eriktse? 简介:19岁,211计算机在读,现役ACM银牌选手?力争以通俗易懂的方式讲解算法!❤️欢迎关注我,一起交流C++/Python算法。(优质好文持续更新中……)?? 个人博客:www.eriktse.com A-蛋…

    算法与数据结构 2023年4月18日
    00
  • Java数据结构之优先级队列(堆)图文详解

    Java数据结构之优先级队列(堆)图文详解 什么是优先级队列(堆) 优先级队列(堆)是一种非常重要的数据结构,它能够更好地管理数据,分配任务等。优先级队列的本质就是一种特殊的队列,它是一种可以根据元素的优先级来出队的数据结构。 通常情况下,队列中存储了一系列具有优先级的数据。当我们从队列中取出元素时,优先级高的元素会先出队。因此,我们需要一种数据结构,来对这…

    数据结构 2023年5月17日
    00
  • C语言编程简单却重要的数据结构顺序表全面讲解

    C语言编程简单却重要的数据结构顺序表全面讲解 什么是顺序表? 顺序表是一种线性表,指的是一组有限元素的有限序列,其元素的逻辑顺序与它们在分配到的内存地址上的物理顺序相同或者等价。也就是说,顺序表中的元素按照其在内存中的位置依次存放。 顺序表的实现方式 顺序表的实现方式一般是使用数组,数组中的每一个元素对应着顺序表中的一个元素,位置相对应。 顺序表的优点 支持…

    数据结构 2023年5月17日
    00
  • Python中的函数式编程:不可变的数据结构

    Python是一门支持函数式编程的语言。相比于传统的命令式编程,函数式编程更加强调数据的不可变性。本文将介绍如何在Python中使用不可变的数据结构实现函数式编程。 什么是不可变的数据结构? 不可变数据结构是指一旦创建就无法改变的数据结构。在Python中,元组(tuple)是一个典型的不可变数据结构。以下是一个创建元组的示例代码: a_tuple = (1…

    数据结构 2023年5月17日
    00
  • C语言创建和操作单链表数据结构的实例教程

    C语言创建和操作单链表数据结构的实例教程 什么是单链表 单链表是一种常见的动态数据结构,它由一个个节点组成,每个节点包含范围内的数据和指向下一个节点的指针。单链表通常用于需要频繁插入删除节点的情况。 单链表的创建和操作步骤 创建单链表 定义一个链表节点结构体,结构体中包含要存储的数据和指向下一个节点的指针。 定义一个指向链表头部的指针,如果链表为空,则指针为…

    数据结构 2023年5月17日
    00
  • Python 树表查找(二叉排序树、平衡二叉树)

    下面是 Python 树表查找(二叉排序树、平衡二叉树)的完整攻略: 什么是树表查找 树表查找是一种数据结构,用于在数据集合中快速查找、插入和删除数据。树表查找的基本思想是利用特定的树形结构,在不断比较和移动中找到目标数据。常见的树表查找有二叉排序树和平衡二叉树。 二叉排序树(Binary Search Tree) 二叉排序树是一种特殊的二叉树结构,它满足以…

    数据结构 2023年5月17日
    00
  • C语言数据结构之迷宫问题

    C语言数据结构之迷宫问题 迷宫问题是一种基本的搜索问题,其中需要在一个矩阵中寻找从起点到终点的路径。在本篇文章中,我们将以C语言为例,介绍迷宫问题的完整攻略。 准备工作 在开始之前,我们先要准备好数据结构。为了表示迷宫,我们使用一个二维数组。其中,0表示可以通过的路,1表示障碍物不可通过。为了记录路径,我们还需要使用一个二维数组来表示每个格子是否已经被访问过…

    数据结构 2023年5月17日
    00
  • Mysql Innodb存储引擎之索引与算法

    Mysql Innodb存储引擎之索引与算法 MySQL是一款非常受欢迎的关系型数据库,有许多的存储引擎可供选择,其中InnoDB是目前最受欢迎的存储引擎之一。索引是InnoDB存储引擎的一个重要特性,它可以大大提高数据库查询的效率。本文将详细讲解InnoDB存储引擎的索引与算法。 索引 索引是一种数据结构,它将表中的列与对应的行位置组成键值对,以便快速查找…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部