前端常用数据结构

前端常用数据结构

  • 前端常用数据结构
    • 数据结构
    • 数组
    • 队列
    • 链表
      • 单向链表
      • 双向链表

前端常用数据结构

  • 什么是数据结构
  • 常用的数据结构
    • JavaScript 如何实现
    • 这些数据结构实际场景

数据结构

所谓数据结构,是在计算机中组织、管理和存储数据的一种方式。

🙋:你知道哪些数据结构?

数据结构整体可以分为两大类:线性数据结构 和 非线性数据结构

  • 线性数据结构:数据会排列成线性的序列

    • 数组(Array):一种固定大小的数据结构,里面存储相同类型的元素集合。通过索引来进行访问。
    • 链表(Linked List):由一个一个的节点组成,每个节点会包含数据还有下一个节点的指针(内存地址)
    • 栈(Stack):只有一个出入口,先进后出、后进先出
    • 队列(Queue):有两个口,因此先进先出,后进后出
  • 非线性数据结构:顾名思义,就是元素不以线性的顺序排列

    • 树(Tree):体现了一个层次,DOM 树、组件树
    • 图(Graph):由多个节点以及连接节点的边组成。
    • 哈希表(Hash Table)

前端常用的数据结构有:数组、栈、队列、链表以及树

数组

回顾一下数组创建的方法:

// 字面量创建
const arr = [];
// Array构造函数
const arr2 = new Array(3); // 如果参数只有一个值,那么表示的是长度
const arr3 = new Array(1, 2, 3); // 如果参数是多个值,那么表示的是数组的元素
// Array.of方法:ES6 新引入的方法
// 解决 Array 构造函数参数只有一个的时候的怪异行为
const arr4 = Array.of(3); // [3]
const arr5 = Array.of(1, 2, 3); // [1, 2, 3]
// Array.from方法:从一个类组数对象或者可迭代对象创建一个新的数组
const arr6 = Array.from("abc"); // ['a', 'b', 'c']
// 扩展运算符
const a = [1, 2, 3];
const b = [4, 5, 6];
const arr7 = [...a, ...b];

严格意义来讲,JS 里面所提供的数组并非数据结构里面的数组:

int[] arr = new int[3];
arr[0] = 100; // 合法
arr[1] = 200; // 合法
arr[2] = 300; // 合法
arr[3] = 400; // 报错:数组越界

在 JS 中压根儿就没有数组越界这个概念

const arr = [];
console.log(arr[10]); // undefined
arr[10] = 100;
console.log(arr[10]); // 100

究其原因,是因为 JS 底部,数组实际上就是对象。

类似于:

const arr = {0: 100,1: 200,2: 300,
};
console.log(arr[0]);

  • FILO(first in last out):先进后出
  • LIFO(last in first out):后进先出
class Stack {constructor(...args) {this.stack = [...args];}// 返回栈中元素的数量size() {return this.stack.length;}// 检查栈是否为空isEmpty() {return this.size() === 0;}// 添加一个或者多个元素到栈顶push(...items) {return this.stack.push(...items);}// 移除栈顶元素,返回被移除的元素pop() {return this.stack.pop();}// 返回栈顶元素,但是不删除peek() {return this.isEmpty() ? undefined : this.stack[this.size() - 1];}
}const stack = new Stack();
console.log(stack.isEmpty()); // true
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4, 5, 6);
console.log(stack.size()); // 6
// 访问栈顶的元素
console.log(stack.peek

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java核心面试题汇总

文章目录 1. Java1.1. TCP三次握手/四次挥手1.2 HashMap底层原理1.3 Java常见IO模型1.4 线程与线程池工作原理1.5 讲一讲ThreadLocal、Synchronized、volatile底层原理1.6 了解AQS底层原理吗 2. MySQL2.1 MySQL索引为何不采用红黑树,而选择B树2.2 MySQL索引为何不采…

JVM(类加载机制)

类加载就是 .class 文件, 从文件(硬盘) 被加载到内存(元数据区)中的过程 类加载的过程 加载: 找 .class 文件的过程, 打开文件, 读文件, 把文件读到内存中 验证: 检查 .class 文件的格式是否正确 .class 是一个二进制文件, 其格式有严格的说明 准备: 给类对象分配内存空间 (先在…

【C++干货基地】面向对象核心概念 | 访问限定符 | 类域 | 实例化 | 类对象模型

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 哈喽各位铁汁们好啊,我是博主鸽芷咕《C干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的…

一分钟了解深度学习算法

自从20世纪40年代起人工智能(AI)问世以来,学者们不懈探索着如何使机器具备模拟人类学习能力的能力。随着计算性能的不断提升和算法的演进,深度学习算法已成为AI领域的核心技术。本文将简述深度学习算法的概念、构成要素、应用范围…

【亲测】注册Claude3教程,解决Claude3被封号无法发送手机验证码

【亲测】注册Claude3教程:解决无法发送手机验证码的问题 Anthropic 今日宣布推出其最新大型语言模型(LLM)系列——Claude 3,这一系列模型在各种认知任务上树立了新的性能标准。Claude 3 系列包括三个子模型:Claude 3 …

金三银四,程序员如何备战面试季

金三银四,程序员如何备战面试季 一个人简介二前言三面试技巧分享3.1 自我介绍 四技术问题回答4.1 团队协作经验展示 五职业规划建议5.1 短期目标5.2 中长期目标 六后记 一个人简介 🏘️🏘️个人主页:以山河作礼。 🎖️…

vue中::v-deep的用法

在Vue中&#xff0c;::v-deep是一个用于穿透作用域样式的特殊选择器。 当在一个带有scoped属性的<style>标签中使用::v-deep选择器时&#xff0c;表示允许访问子组件中的样式&#xff0c;即使这些样式被封装在了子组件的作用域中。 在Vue 2.x 中&#xff0c;当使用scop…

Python教程——最后一波来喽

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.使用__slots__2. property3.多重继承 4.定制类5.枚举类6.错误处理7.调试8. 文档测试9.单元测试10. 文件读写11. StringIO和BytesIO12. 操作文件和目录13.序列化14…

【单调栈】Leetcode 739.每日温度

【单调栈】Leetcode 739.每日温度 解法&#xff1a;维护单调栈栈中存的是数组的索引 解法&#xff1a;维护单调栈栈中存的是数组的索引 栈中存的是数组的索引 当新的值比当前栈顶的大&#xff0c;那么就执行出栈-更新result数组-判断当新的值比当前栈顶的大&#xff1f;的循环…

C# 自定义定时器的开启、暂停、继续

一、创建定时器 private System.Windows.Forms.Timer timerGetTime = new System.Windows.Forms.Timer();//创建定时器 public enum RunState//按钮状态 1运行中 2暂停 3停止 { running, pause, stop } RunState runstate…

白银期货开户交割规则有哪些?

白银期货交割是指期货合约到期时&#xff0c;交易双方通过该期货合约所载商品所有权的转移&#xff0c;了结到期未平仓合约的过程。小编在此为大家详细介绍白银期货的交割规则有哪些。白银期货的交割规则有哪些&#xff1f;白银期货的交割规则主要有&#xff1a; 一、交割商品…

(3)(3.2) MAVLink2数据包签名(安全)

文章目录 前言 1 配置 2 使用 3 MAVLink协议说明 前言 ArduPilot 和任务计划器能够通过使用加密密钥添加数据包签名&#xff0c;为空中 MAVLink 传输增加安全性。这并不加密数据&#xff0c;只是控制自动驾驶仪是否响应 MAVLink 命令。 当自动驾驶仪处于激活状态时&#x…

【Python】进阶学习:pandas--info()用法详解

【Python】进阶学习&#xff1a;pandas–info()用法详解 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订…

新零售SaaS架构:订单履约系统的概念模型设计

订单履约系统的概念模型 订单&#xff1a;客户提交购物请求后&#xff0c;生成的买卖合同&#xff0c;通常包含客户信息、下单日期、所购买的商品或服务明细、价格、数量、收货地址以及支付方式等详细信息。 子订单&#xff1a;为了更高效地进行履约&#xff0c;大订单可能会被…

Python实战(11):正则表达式

正则表达式 re.match()方法 re.match 尝试从字符串的起始位置匹配一个模式&#xff0c;如果不是起始位置匹配成功的话&#xff0c;match() 就返回 None。 import re# <re.Match object; span(0, 3), matchwww> print(re.match("www", "www.baidu.com&q…

DOM HTML5 -操作自定义属性

我们的标签它默认就有自己的属性&#xff1a;id、class、style、src等等 ​ 如果它不存在&#xff0c;我们自己写入的叫做”自定义属性“&#xff0c;一般我们用来存储某些数据的场景下使用&#xff1b; <div class"box" boxTitle"frameworkBox" id&q…

MySQL运维实战之备份和恢复(8.3)xtrabackup增量备份

作者&#xff1a;俊达 xtrabackup支持增量备份。在做增量备份之前&#xff0c;需要先做一个全量备份。xtrabackup会基于innodb page的lsn号来判断是否需要备份一个page。如果page lsn大于上次备份的lsn号&#xff0c;就需要备份该page。 1、先进行一次全量备份。 xtrabackup -…

科技创新赋能森歌制造-浅谈森歌高品质发展之路

随着时代的变迁&#xff0c;科技创新已成为推动制造业高质量发展的关键力量。森歌&#xff0c;作为厨电行业的佼佼者&#xff0c;始终坚守着对优质品质的承诺&#xff0c;并在品牌的科技化升级之路上不断迈进。 在制造业科技化的背景下&#xff0c;新型工业化、数字经济、制造…

TQTT X310 软件无线电设备的FLASH固件更新方法

TQTT X310 除了PCIE口全部兼容USRP 官方的X310&#xff0c;并配备两块UBX160射频子板以及GPSDO。TQTT X310可以直接使用官方的固件&#xff0c;但是不支持官方的固件升级命令。这篇BLOG提供烧写刷新FLASH的方法。 1&#xff0c;使用的是WINDOWS系统。首先给X310接入电源并开机…

【计算机学习】-- 网页视频加速

系列文章目录 文章目录 系列文章目录前言一、开发者选项二、定义和用法1.基础语法&#xff1a;2.什么是uncaught TypeError:Cannot read properties of null? 二、开发者工具面板&#xff1a;1.Elements面板&#xff1a;2.Console面板&#xff1a; 总结 前言 一、开发者选项 …