javaScript可以原生提供的数据类型的确有限,但是并不代表不需要。

从一开始只有Object、Array到现在增加的Map和Set也确实证明前端也在不断发展自己的数据结构。

下边就有些没有的数据结构进行模拟实现。

java中链表的必要性

Java内部有自己的链表结构的数据类型LinkedList

为什么要有链表这种存储结构呢?

因为在java中,java数组存在弊端,ArrayList倒是解决了部分弊端(支持动态自动扩容)。

但是 LinkedList则以链表的形式进行存储,会有其它好处,以下是对比

链表 数组
内存占用 不需要连续的内存空间 需要连续的内存空间
大小可变 链表的大小可动态变化 数组大小固定,不能动态扩展
增删 较快,只需要修改前一个元素的指针即可 较慢,需要移动修改元素只有的所有元素
查询 较慢,只能遍历查找 较快,可以通过下标直接访问
在访问方式上 必须是顺序访问,不能随机访问 可以随机访问其中的元素
空间的使用上 可以随意扩大 不能

链表是有data和指向下一个数据的指针地址两部分组成

数组是有下标索引和data两部分组成

数组和链表都是线性表的结构,只不过它们的存储方式不一样

根据存储方式不同,可将线性表分为顺序表和链式表;

数组:在内存中,是一块连续的内存区域;

链表:是由不连续的内存空间组成;





参考:链接1链接2

JavaScript不需要链表

了解过链表的同学应该都知道,链表有几个特点:

1、可以动态扩展空间(在js中,数组本来是这样的,但是有的语言中数组的长度是固定的,不能动态添加,如c、java语言)

2、需要一个头节点

3、需要知道下一个节点的地址

因为数组结构的局限性,所以才会有链表结构的存储方式。

那么这些局限性,在JavaScript中是不存在的。我们看看MDN怎么说的?

数组是一种类列表对象,它的原型中提供了遍历和修改元素的相关操作。

JavaScript 数组的长度和元素类型都是非固定的。

因为数组的长度可随时改变,并且其数据在内存中也可以不连续,所以 JavaScript 数组不一定是密集型的,这取决于它的使用方式。

一般来说,数组的这些特性会给使用带来方便,但如果这些特性不适用于你的特定使用场景的话,可以考虑使用类型数组 TypedArray

要问一个问题。

有谁知道JS的Array底层到底是个什么东西?

它具备栈的用法,push pop,加上unshift shift又是一个queue

又具备splice功能(链表擅长的)

但随机访问又具备O(1)的保证(真实array?hashmap?)

主要还是JS是门解释型&&高级上层语言,你所想写的东西底层体现的不一定是完完全全的数据结构思想体现。所写内容的性能实际受到的影响因素太多了。

换种问法好了,Array.prototype.sort底层采用的排序方案是什么?每款引擎每个年代都是同一种方案吗?

所以从前端数据结构角度(面向面试编程),链表是一个重要的算法、数据结构考点,实际使用实在是鲜有机会。

JavaScript真的需要链表吗?的更多相关文章

  1. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  2. 标 题: JavaScript真的要一统江湖了

    http://www.newsmth.net/nForum/#!article/Python/125347?p=4 标  题: JavaScript真的要一统江湖了 发信站: 水木社区 (Fri Se ...

  3. JavaScript真的要一统江湖了

    ttp://www.newsmth.net/nForum/#!article/Python/125347?p=4 标  题: JavaScript真的要一统江湖了 发信站: 水木社区 (Fri Sep ...

  4. 用JavaScript来实现链表LinkedList

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明原文地址. 写在前面 好多做web开发的朋友,在学习数据结构和算法时可能比较讨厌C和C++,上学的时候写过的也忘得差不多了,更别提没写过的了.但幸运 ...

  5. javascript中的链表结构—从链表中删除元素

    1.概念 上一个博文我们讲到链表,其中有一个方法remove()是暂时注释的,这个方法有点复杂,需要添加一个Previous()方法找到要删除的元素的前一个节点,这一个博文我们来分析一下这个remov ...

  6. javascript中的链表结构

    1.定义 很多编程语言中数组的长度是固定的,就是定义数组的时候需要定义数组的长度,所以当数组已经被数据填满的时候,需要再加入新的元素就很困难.只能说在部分变成语言中会有这种情况,在javascript ...

  7. 使用JavaScript实现单向链表

    一.实现功能 1.链表元素头部插入 this.unShift = function(data) {} 2.链表元素尾部插入 this.append= function(data) {} //返回boo ...

  8. javascript算法-单链表

    链表相比数组更具灵活性和扩展性.主要有节点数据以及指向节点的指针所构成. 链表中节点的实现[元素和指针]: let Node = function( element ){ this.element = ...

  9. 【javascript】数据结构-链表

    // 创建一个链表 function LinkedList(){ // 创建一个Node辅助类,表示需要加入列表的项,它包含一个element属性,即表示需要加入到列表中的值,next属性表示指向下一 ...

  10. JavaScript实现单向链表

    JavaScript 本身提供了十分好用的数据类型,以满足大家的日常使用.单靠 Array  和 Object 也的确足够应付日常的绝大部分需求,这也导致了很多前端er对数据结构这一块不是十分的了解. ...

随机推荐

  1. Innodb快速复习

    放一张官方架构图: 参考文章: 一文带你了解MySQL之InnoDB_Buffer_Pool-阿里云开发者社区这一篇buffer pool讲解的很好 [动画演示:MySQL的BufferPool和Ch ...

  2. 工良出品 | 长文讲解 MCP 和案例实战

    作者:痴者工良 博客地址:https://www.whuanle.cn/ 示例项目地址:https://github.com/whuanle/mcpdemo 近期 MCP 协议越来越爆火,很多开发者都 ...

  3. 前端速成之——Script

    Script 1-引入js和函数调用 function函数:必然存在一个返回值,绝对不会书写 void,要么返回 undefine,要么返回 return 的数据 function etoak(val ...

  4. SQL Server 2025 中的改进

    SQL Server 2025 中的改进 当我们接近 SQL Server 2025 的首次公开版本时,开始深入探究 Azure SQL DB 如今(已公布和未公布)但在 SQL Server 盒装产 ...

  5. Java--事务,操作数据库,实现转账

    更新:2019/3/29 目录 简介 事务的四个特性 一个小Demo 目录结构 jdbc.properties JDBCUtil.java TestTransaction.java[核心代码] 数据库 ...

  6. 『Plotly实战指南』--在科学数据可视化中的应用(上)

    在科学研究中,数据可视化是连接实验与理论的关键桥梁. 它不仅能够清晰地呈现实验规律,还能验证假设并支持科研决策. Plotly作为一款强大的可视化工具,凭借其交互性.动态图表支持和灵活的可定制性,在科 ...

  7. 信息资源管理文字题之“IT服务管理的核心流程和具体内容”

    一.为了充分利用ERP信息系统资源,LX集团采用了各种先进的信息系统管理概念和方法,包括IT服务管理. 要求:说明IT服务管理流程包括那两大核心类别,分别说明他们个包含哪些具体流程 二.答案 答:两大 ...

  8. Linux之新增文件夹

    一.格式 mkdir 文件名 二.案例 #查看文件 root@bbbbeb52:/# ll total 108 drwxr-xr-x. 1 root root 57 May 24 13:09 ./ d ...

  9. 自建OpenDeepWiki并且白嫖500代金券

    相信很多人都对OpenDeepWiki很感兴趣.OpenDeepWiki提供了MCP实现,您可以部署属于自己公司的私有知识库,将仓库加入进去,通过MCP对指定的仓库实现内容检索并提供最佳指引. 白嫖5 ...

  10. 消息队列, 一种取舍的选择 Redis Stream

    人多公司方便多个业务方解耦, 常用一些成熟的消息队列. 会有专门部门帮你维护好. 但在小公司, 看成本靠个人. 有的简单可能就是 redis list or mysql 存一些状态, 有问题了就自己手 ...