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

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过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.mzph.cn/news/804630.shtml

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

相关文章

每日一题:有效的数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; 注…

git submodule---同步最新的内容

0 Preface/Foreword 1 同步最新submodule内容到repo中 项目的repo包含了一个子模块&#xff0c;在开发过程中&#xff0c;经常需要同步子模块最新的commit到repo中。该如何操作呢&#xff1f; 本地在克隆时候&#xff0c;已经同步把子模块中的内容克隆下来了&#xff0c;但是…

Python爬取淘宝商品评价信息API接口测试实例

item_review-获得淘宝商品评论 公共参数 请求地址: taobao/item_review 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,it…

4.5日学习打卡----学习Apache HttpClient 5

4.5日学习打卡 目录&#xff1a; 4.5日学习打卡Apache Commons HttpClient简介 Apache HttpClient 5简介依赖HttpClient 5 GET 请求HttpClient 5 Fluent GETHttpClient5 GET 请求参数HttpClient 5 POST 请求HttpClient 5 Fluent POSTHttpClient5 POST JSON 参数HttpClient 5 设…

Java中利用BitMap位图实现海量级数据去重

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 前言 什么是BitMap&#xff1f;有什么用&#xff1f; 基本概念 位图的优势 …

加快构建数字影像优势 成都文创产业园区持续发力

在数字化时代的浪潮下&#xff0c;成都文创产业园区以其前瞻性的视野和战略布局&#xff0c;正加快构建数字影像优势&#xff0c;成都文创产业园区持续发力&#xff0c;为城市的文化创意产业发展注入新动力。国际数字影像产业园作为其中的佼佼者&#xff0c;以其三大生态服务体…

GitHub 仓库 (repository) Watch - Star - Fork - Follow

GitHub 仓库 [repository] Watch - Star - Fork - Follow References 眼睛图标旁边写着 Watch 字样。点击这个按钮就可以 Watch 该仓库&#xff0c;今后该仓库的更新信息会显示在用户的公开活动中。Star 旁边的数字表示给这个仓库添加 Star 的人数。这个数越高&#xff0c;代表…

小白学Java成长日记特别篇

晚上好&#xff0c;各位小伙伴。今天给大家带来的是Java的输出补充篇&#xff0c;前两篇说了输出和输入的大概&#xff0c;但我没有详细讲它俩&#xff0c;因此这篇文章来详细的聊一聊它俩。那么废话不多说&#xff0c;我们赶紧进入正题。 首先讲一讲这个Java的输出吧。 输出格…

SpringBoot集成Skywalking日志收集

在实际项目中&#xff0c;为了方便线上排查问题&#xff0c;尤其是微服务之间调用链路比较复杂的系统中&#xff0c;通过可视化日志的手段仍然是最直接也很方便的排查定位问题的手段&#xff0c;比如大家熟悉的ELK就是一种比较成熟的可视化日志展现方式&#xff0c;在skywalkin…

书生·浦语大模型第二期实战营第二课笔记和基础作业

来源&#xff1a; 作业要求:Homework - Demo 文档教程:轻松玩转书生浦语大模型趣味 Demo B站教程:轻松玩转书生浦语大模型趣味 Demo 1. 笔记 2.基础作业 2.1 作业要求 2.2 算力平台 2.3 新建demo目录&#xff0c;以及新建目录下的文件&#xff0c;下载模型参数 2.4 Intern…

谷歌seo自然搜索排名怎么提升快?

要想在谷歌上排名快速上升&#xff0c;关键在于运用GPC爬虫池跟高低搭配的外链组合 首先你要做的&#xff0c;就是让谷歌的蜘蛛频繁来你的网站&#xff0c;网站需要被谷歌蜘蛛频繁抓取和索引&#xff0c;那这时候GPC爬虫池就能派上用场了&#xff0c;GPC爬虫池能够帮你大幅度提…

LangChain - Chain

文章目录 1、概览为什么我们需要链? 2、快速入门 (Get started) - Using LLMChain多个变量 使用字典输入在 LLMChain 中使用聊天模型&#xff1a; 3、异步 API4、不同的调用方法__call__调用仅返回输出键值 return_only_outputs只有一个输出键 run只有一个输入键 5、自定义cha…

蓝桥杯嵌入式(G431)备赛笔记——UART

printf的重定向 为了方便使用&#xff0c;通过keil中的Help功能的帮助&#xff0c;做一个printf的重定向 搜索fputc&#xff0c;复制这段 将复制的那段放入工程中&#xff0c;并添加串口发送的函数 关键代码 u8 rx_buff[30]; // 定义一个长度为30的接收缓冲区数组rx_buff u8…

“数字大冒险:探索二分查找的神奇之旅“

前言 作者&#xff1a;小蜗牛向前冲 专栏&#xff1a;小蜗牛算法之路 专栏介绍&#xff1a;"蜗牛之道&#xff0c;攀登大厂高峰&#xff0c;让我们携手学习算法。在这个专栏中&#xff0c;将涵盖动态规划、贪心算法、回溯等高阶技巧&#xff0c;不定期为你奉上基础数据结构…

算法:多重背包问题dp

文章目录 一、多重背包问题特点1.1、多重背包问题的特征1.2、解决多重背包问题的基本方法典型例题&#xff1a;AcWing——多重背包问题I 1.3、二进制优化1.3.1、二进制优化的思想1.3.2、多重背包问题的二进制优化 一、多重背包问题特点 多重背包问题是背包问题的又一变种&…

如何在Flutter应用中配置ipa Guard进行混淆

在移动应用开发中&#xff0c;保护应用代码安全至关重要。Flutter 提供了简单易用的混淆工具&#xff0c;帮助开发者在构建 release 版本应用时有效保护代码。本文将介绍如何在 Flutter 应用中使用混淆&#xff0c;并提供了相关的操作步骤和注意事项。 &#x1f4dd; 摘要 本…

彩虹聚合DNS管理系统源码

聚合DNS管理系统可以实现在一个网站内管理多个平台的域名解析&#xff0c;目前已支持的域名平台有&#xff1a;阿里云、腾讯云、华为云、西部数码、CloudFlare。本系统支持多用户&#xff0c;每个用户可分配不同的域名解析权限&#xff1b;支持API接口&#xff0c;支持获取域名…

LeetCode-冗余连接(并查集)

每日一题&#xff0c;今天又刷到一道使用并查集来解决的问题&#xff0c;再次加深了一遍自己对并查集的印象和使用。 题目要求 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1&#xff5e;n) 的树中添加一条边后的图。添加的边的两个顶点包含在 1…

对象参数验证工具, 解决非controller层数据校验问题, @Validated、@Valid

工具类 package com.common;import com.common.SysException;import javax.validation.ConstraintViolation; import javax.validation.Validation; import javax.validation.Validator; import java.util.Set; import java.util.stream.Collectors;/**1. author: 0i773. Desc…

【计算机毕业设计】超市进销存管理系统——后附源码

&#x1f389;**欢迎来到我的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 一名来自世界500强的资深程序媛&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 在深度学习任务中展现出卓越的能力&#xff0c;包括但不限于…