当前位置: 首页 > article >正文

js实现数据结构

常见的数据结构

数组

  • 创建数组
    数组字面量[],new Array().fill()
    二维数组,两层循环创建

  • 头部添加unshift
    尾部添加push
    任意位置添加 splice(index,0,item)

  • 头部删除 shift
    尾部删除pop
    任意位置删除splice(index,num)

先进后出
push,pop

队列

先进先出
push,shift

链表

class Node{
	constructor(val)
	{
		this.val=val;
		this.next=null;
	}
}
  • 添加元素
cur.next = pre.next
pre.next = cur.next
  • 删除元素
pre.next = cur.next

二叉树

class TreeNode(){
	constructor(val){
		this.val=val;
		this.left=null;
		this.right=null;
	}
}
  • 遍历
    先序遍历,中序遍历,后序遍历

数组应用

map

空间换时间 – map
1. 两数之和 - 力扣(LeetCode)

双指针

有序 数组 对撞指针

88. 合并两个有序数组 - 力扣(LeetCode)
15. 三数之和 - 力扣(LeetCode)

字符串的应用

  • 反转字符串
    str.split("").reverse().join("")
  • 判断是否是回文字符串
    `str == str.split(“”).reverse().join(“”)

回文字符串

对称 + 双指针
LCR 019. 验证回文串 II - 力扣(LeetCode)

字符串匹配

  

class WordDictionary{

    constructor(){

        this.words={}

    }

    //add

    addWord(word){

      if(this.words[word.length]){

        this.words[word.length].push(word)

      }else{

        this.words[word.length] = [word]

      }

    }

    //search

    search(word){

        if(!this.words[word.length]){

            return false;

        }

        const len = word.length;

        //不包含.,则是普通字符

        if(!word.includes(".")){

            return this.words[len].includes(word);

        }

        //包含.则是正则表达式

        const reg = new RegExp(word);

        return this.words[len].some((item) => reg.test(item));

    }

  

}

正则表达式

test 是否匹配成功
match 获取捕获结果

/**

 * 实现一个atoi函数,使其能将字符串转换成整数

 */

function atoi(str){

    //去除空格

    const reg = /\s*([-\+]?[0-9]*).*/

    //得到捕获组

    const groups = str.match(reg);

    //最大值

    const max = Math.pow(2,31) - 1;

    //最小值

    const min = -Math.pow(2,31);

    //存储转化出来的数字

    let targetNum = 0;

    if(groups){

        targetNum = parseInt(groups[1]);

        if(isNaN(targetNum)){

            targetNum =  0;

        }

    }

  

    if(targetNum > max){

        return max;

    }

    if(targetNum < min){

        return min;

    }

  

    return targetNum;

  
  

}

链表应用

链表处理

哑节点
dummy = new ListNode() dummy.next = head

21. 合并两个有序链表 - 力扣(LeetCode)
83. 删除排序链表中的重复元素 - 力扣(LeetCode)
82. 删除排序链表中的重复元素 II - 力扣(LeetCode)

链表的反转

一次遍历 快慢指针
LCR 021. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)

206. 反转链表 - 力扣(LeetCode)

链表成环

设置flag

141. 环形链表 - 力扣(LeetCode)
142. 环形链表 II - 力扣(LeetCode)

栈与队列

括号问题

20. 有效的括号 - 力扣(LeetCode)

每日温度

739. 每日温度 - 力扣(LeetCode)

最小栈

155. 最小栈 - 力扣(LeetCode)

用栈实现队列

232. 用栈实现队列 - 力扣(LeetCode)

滑动窗口

双端队列,头尾皆可进行删除添加
239. 滑动窗口最大值 - 力扣(LeetCode)


http://www.kler.cn/a/508498.html

相关文章:

  • PTA L1-039 古风排版
  • ZooKeeper 核心知识全解析:架构、角色、节点与应用
  • WOA-CNN-GRU-Attention、CNN-GRU-Attention、WOA-CNN-GRU、CNN-GRU四模型对比多变量时序预测
  • 【数据库初阶】MySQL中表的约束(上)
  • QT:IconButton的动画效果
  • 数字小偷:2025年全面防护指南
  • 掌握Linux系统优化的技巧:提升服务器性能的指南
  • 模之屋模型导入到UE5
  • XML、HTML 和 JSON 的区别与联系
  • React第二十二章(useDebugValue)
  • TikTok专线服务器助力品牌营销新高度
  • Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250117
  • magic-dash:纯Python轻松开发网页应用
  • 使用 Vue.js 3 开发动态模块化组件:实现插件式表单系统
  • python实现webrtc通过whep拉取实时音频流
  • [leetcode](适合有一定基础需要刷题的宝宝)map STL的增删查改
  • 怎么修复损坏的U盘?而且不用格式化的方式!
  • (一)相机标定——四大坐标系的介绍、对应转换、畸变原理以及OpenCV完整代码实战(C++版)
  • MySQL下载安装及配置
  • mysql-5.7.18保姆级详细安装教程
  • 数据仓库复用性:业务需求复用性设计
  • Mac 使用 GVM 管理多版本 Go 环境
  • Big-endian(大端字节序)与Little-endian(小端字节序)区别
  • 【数据库】MySQL数据库SQL语句汇总
  • 基于微信小程序的电子点菜系统设计与实现(KLW+源码+讲解)
  • MySQL 与 Redis 数据一致性 2