亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【學習打卡】第一天 JavaScript數據結構和算法

内容概述

常用的数据结构


队列
集合
链表
字典


常用的算法

冒泡算法
选择算法
插入算法
归并算法
快速算法
顺序算法
二分搜索

常用算法的设计思想

分而治之
动态规划
贪心
回溯

数据结构 - 栈

栈是什么?

栈是一种后进先出的数据结构,可以通过数组Array的push和pop方法来模拟栈这种数据结构。

class Stack {
  constructor() {
    this.list = [];
  }
  push(item) {
    return this.list.push(item);
  }
  pop() {
    return this.list.pop();
  }
  peek() {
    return this.list[this.list.length - 1];
  }
}

栈的使用场景是什么?

需要后进先出的使用场景。
比如:十进制转二进制、判断字符串的括号是否有效、函数调用栈、二叉树的前序遍历等等

具体案例

一、判断字符串的括号是否有效。

给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。

思路:

  1. 创建一个栈,遍历整个字符串
  2. 遇到左括号就入栈
  3. 遇到右括号时,判断当前右括号是否与栈顶元素相匹配,如果不匹配,则直接返回false;如果匹配,就将栈顶元素出栈。
  4. 遍历完成后,如果栈为空则返回true,如果栈不空则返回false
function isValid(s) {
  let len = s.length;
  if (len % 2 !== 0) {
    return false;
  }

  let stack = [];

  let map = new Map([
    [')', '('],
    ['}', '{'],
    [']', '['],
  ])

  for (let key of s) {
    if (map.has(key)) {
      if (!stack.length || map.get(key) !== stack[stack.length - 1]) {
        return false;
      } else {
        stack.pop();
      }
    } else {
      stack.push(key);
    }
  }

  return !stack.length
}
二、十进制转二进制

如下,可以通过数字的toString(2)把十进制转换为二进制

const num = 5
console.log(num.toString(2));  // 101

现在利用栈来实现上面的功能

思路:

  1. 创建一个栈
  2. 执行循环操作,首先把余数入栈,
  3. 将num重置为计算得到的商;直到商为0,循环结束
  4. 循环当前的栈,依次把栈顶元素出栈,拼接成一个字符串输出
function convertToBinary(num) {
  let str = '';
  const stack = [];

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

  while (stack.length) {
    const n = stack.pop();
    str += n;
  }

  return str;
}
點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
Web前端工程師
手記
粉絲
3
獲贊與收藏
9

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消