数组与链表:JavaScript中的数据结构选择

news2024/11/27 22:36:56

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 摘要:
    • 引言:
    • 正文:
      • 1️⃣ 数组
      • 2️⃣ 链表
    • 总结:
    • 参考资料:

摘要:

本文将介绍JavaScript中数组和链表这两种数据结构的特点和应用场景。通过了解它们的优势和局限性,我们可以更明智地选择合适的数据结构来优化我们的代码和程序性能。

引言:

在JavaScript编程中,选择合适的数据结构对于提高代码的性能和可维护性至关重要。数组和链表是两种常用的数据结构,它们各有特点和应用场景。本文将详细介绍数组和链表的概念、特点以及在JavaScript中的应用,帮助读者更好地理解和选择合适的数据结构。

正文:

1️⃣ 数组

数组是JavaScript中最基本的数据结构之一,它允许我们存储一系列元素,并提供快速的随机访问能力。数组的特点包括:

  • 随机访问:数组提供了O(1)的时间复杂度来访问任意元素。
  • 动态大小:数组的大小可以自动调整,以适应存储的数据量。
  • 数组方法:JavaScript提供了丰富的数组方法,如push、pop、shift、unshift等,方便我们操作数组。

以下是一些使用数组的代码案例:

  1. 创建数组
let arr = [1, 2, 3, 4, 5];
  1. 访问数组元素
let arr = [1, 2, 3, 4, 5];
let first = arr[0]; // 1
let second = arr[1]; // 2
  1. 修改数组元素
let arr = [1, 2, 3, 4, 5];
arr[0] = 10; // [10, 2, 3, 4, 5]
  1. 添加元素到数组末尾
let arr = [1, 2, 3, 4, 5];
arr.push(6); // [1, 2, 3, 4, 5, 6]
  1. 从数组中删除元素
let arr = [1, 2, 3, 4, 5];
arr.splice(2, 1); // 从索引2开始删除1个元素,返回被删除的元素 [3]
  1. 数组遍历
let arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}
// 输出:1 2 3 4 5
  1. 使用数组方法
let arr = [1, 2, 3, 4, 5];
let sum = arr.reduce((acc, val) => acc + val, 0); // 计算数组元素之和
console.log(sum); // 输出:15

这些案例展示了数组在JavaScript中的基本用法。在实际编程中,数组可以用于存储和操作数据,提高代码的可读性和可维护性。

2️⃣ 链表

链表是一种不连续存储的数据结构,每个元素包含数据和指向下一个元素的指针。链表的特点包括:

  • 插入和删除效率:链表在插入和删除操作上具有较高的效率,因为它们不需要移动其他元素。
  • 不支持随机访问:链表不支持随机访问,需要从头节点开始遍历才能找到目标元素。
  • 内存效率:链表在内存分配上更加灵活,不需要预先分配固定大小的内存。

链表是一种线性数据结构,它不按照元素的先后顺序存储数据,而是每个元素都存储在一个节点中,节点之间通过指针连接。以下是一些使用链表的代码案例:

  1. 定义链表节点
class ListNode {
  constructor(val) {
    this.val = val;
    this.next = null;
  }
}
  1. 创建链表
let head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
  1. 访问链表元素
let head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
let second = head.next; // 2
  1. 修改链表元素
let head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4); // [1, 2, 3, 4]
  1. 添加元素到链表末尾
let head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5); // [1, 2, 3, 4, 5]
  1. 从链表中删除元素
let head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
head.next.next.next.next.next = null; // 从链表中删除元素5
  1. 链表遍历
let head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
function printList(head) {
  let current = head;
  while (current !== null) {
    console.log(current.val);
    current = current.next;
  }
}
printList(head); // 输出:1 2 3 4 5

这些案例展示了链表在JavaScript中的基本用法。在实际编程中,链表可以用于处理动态数据,提高代码的灵活性和可扩展性。

总结:

数组和链表是JavaScript中两种重要的数据结构,它们各有特点和应用场景。在实际开发中,我们需要根据需求选择合适的数据结构。例如,当需要快速随机访问时,数组是一个很好的选择;当需要频繁插入和删除操作时,链表可能更加合适。了解和掌握这两种数据结构的使用和选择,对于提高代码性能和可维护性具有重要意义。

参考资料:

  • JavaScript数组
  • JavaScript链表

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

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

相关文章

单片机之蜂鸣器

目录 蜂鸣器介绍 蜂鸣器的分类 发声原理分类 按有源无源分类 三极管驱动 蜂鸣器原理 音符与频率对照表 蜂鸣器播放130.8Hz的声音 仿真案例 蜂鸣器发声 电路图 keil文件 蜂鸣器播放音乐 歌曲数据获得 使用的频率 keil文件 蜂鸣器介绍 前言&#xff1a;蜂鸣器是…

SpringBoot中注册Bean的方式汇总

文章目录 ComponentScan Componet相关注解BeanImportspring.factories总结Configuration和Component的主要区别&#xff1f;Bean是不是必须和Configuration一起使用&#xff1f;Import导入配置类有意义&#xff1f;出现异常&#xff1a;java.lang.NoClassDefFoundError: Could…

巨控GRM230远程智能模块:定义未来智慧水务的新篇章

标签:#智能模块 #自动化控制 #远程监控 #水质检测 #无线数据传输 在如今这个快速发展的时代&#xff0c;智能化已经成为了各行各业升级转型的关键词。尤其在水务管理领域&#xff0c;传统的手动操作和监控方法逐渐不能满足现代化的需求&#xff0c;而巨控科技推出的GRM230远程…

Docker容器嵌入式开发:MySQL表的外键约束及其解决方法

本文内容涵盖了使用MySQL创建数据库和表、添加数据、处理字符集错误、解决外键约束问题以及使用SQL查询数据的过程。通过创建表、插入数据和调整字符集等操作&#xff0c;成功解决了数据库表中的字符集问题&#xff0c;并使用INSERT语句向各个表中添加了示例数据。同时&#xf…

12.C++常用的算法_遍历算法

文章目录 遍历算法1. for_each()代码工程运行结果 2. transform()代码工程运行结果 3. find()代码工程运行结果 遍历算法 1. for_each() 有两种方式&#xff1a; 1.普通函数 2.仿函数 代码工程 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<vect…

【三十九】【算法分析与设计】综合练习(5),79. 单词搜索,1219. 黄金矿工,980. 不同路径 III

79. 单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平…

二豆写作能用吗 #笔记#笔记

二豆写作是一款非常好用、靠谱、方便的论文写作工具&#xff0c;它能帮助用户快速完成论文写作&#xff0c;并且具有查重降重的功能。那么&#xff0c;二豆写作到底能不能用呢&#xff1f;答案是肯定的&#xff0c;二豆写作绝对是值得推荐的。 首先&#xff0c;二豆写作提供了丰…

不定长顺序表

一.不定长顺序表的结构: typedef struct DSQList{ int* elem;//动态内存的地址 int length;//有效数据的个数 int listsize;//总容量 }DSQList,*DPSQList; 很明显,为了能实现扩容(否则如何实现再次判满呢?),我们必须要在定长顺序表的基础上增加一个总容量;结构示意图如下: 二…

基于ros的相机内参标定过程

基于ros的相机内参标定过程 1. 安装还对应相机的驱动2. 启动相机节点发布主题3. 下载camera_calibartion4. 将红框的文件夹复制在自己的工作空间里边&#xff0c;编译5. 标定完成以后&#xff0c;生成内参参数文件camera.yaml。将文件放在对应的路径下&#xff0c;修改config文…

(二)ffmpeg 拉流推流示例

一、搭建流媒体服务器 在这里&#xff0c;选用的流媒体服务器是mediamtx。 下载地址&#xff1a;https://github.com/bluenviron/mediamtx/releases/tag/v1.6.0 系统不同选择的压缩包不同&#xff0c;我用的是ubuntu系统。 下载下来之后进行解压&#xff0c;可以看到里面有三…

【随笔】Git 高级篇 -- 最近标签距离查询 git describe(二十一)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

Android 属性动画及自定义3D旋转动画

Android 动画框架 其中包括&#xff0c;帧动画、视图动画&#xff08;补间动画&#xff09;、属性动画。 在Android3.0之前&#xff0c;视图动画一家独大&#xff0c;之后属性动画框架被推出。属性动画框架&#xff0c;基本可以实现所有的视图动画效果。 视图动画的效率较高…

常见性能测试工具对比

在性能测试工作中&#xff0c;我们常常会遇到好几个工具&#xff0c;但是每一个工具都有自己的优势&#xff0c;一时间不知道怎么选择。 今天我们就将性能测试常用的工具进行对比&#xff0c;这样大家在选择工具的时候心里就有底啦&#xff01; 阿里云PTS 性能测试PTS&#xff…

25. 文档测试

作为下午题出现的几率很低&#xff1b; 主要议题&#xff1a; 1.软件文档分类 2.用户文档的内容 用户文档测试的作用&#xff1a; 3.用户文档测试需要注意的问题 4.用户文档测试的要点 5.用户手册测试 6.在线帮助测试

安卓的认证测试

1 CTS CTS 是 Android 兼容性测试套件&#xff0c;用于验证设备是否符合 Android 平台的兼容性标准。它包含一系列测试用例&#xff0c;涵盖了设备的各个方面&#xff0c;如硬件功能、软件功能、API 的正确实现等。通过 CTS 测试&#xff0c;设备厂商可以确保其设备符合 Andro…

工单管理系统设计方案,工单系统的流程

工单管理系统是一种用于管理和跟踪工作流程的软件系统。它可以帮助企业和组织更好地分配任务、优化工作流程、提高生产效率和客户满意度。下面是一个基本的工单管理系统设计方案&#xff1a;需求分析  在设计工单管理系统之前&#xff0c;需要进行需求分析&#xff0c;确定系…

C语言 | Leetcode C语言题解之第17题电话号码的字母组合

题目&#xff1a; 题解&#xff1a; char phoneMap[11][5] {"\0", "\0", "abc\0", "def\0", "ghi\0", "jkl\0", "mno\0", "pqrs\0", "tuv\0", "wxyz\0"};char* digits…

【论文解读】大模型事实性调查(下)

http://t.csdnimg.cn/4md5U 上期我们分享了《大模型事实性调查》论文解读的前半部分&#xff0c;这一期为大家带来后面的内容&#xff0c;欢迎阅读交流。 四、事实性分析 在前面的第3节中&#xff0c;论文提供了与评估事实性相关的定量统计数据。在本节中&#xff0c;论文将更…

841. 钥匙和房间

841. 钥匙和房间 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;_841钥匙和房间_dfs_841钥匙和房间_bfs 错误经验吸取 原题链接&#xff1a; 841. 钥匙和房间 https://leetcode.cn/problems/keys-and-rooms/description/ 完成情况&…

Vue.js组件精讲 基础:Vue.js组件的三个API:prop、event、slot

如果您已经对 Vue.js 组件的基础用法了如指掌&#xff0c;可以跳过本小节&#xff0c;不过当做复习稍读一下也无妨。 组件的构成 一个再复杂的组件&#xff0c;都是由三部分组成的&#xff1a;prop、event、slot&#xff0c;它们构成了 Vue.js 组件的 API。如果你开发的是一个…