javascript中有链表吗
时间:2022-06-16 [网络编程]作者:fabuyuan 浏览:3 次
JavaScript中没有链表;链表是指多个元素组成的列表,元素存储不连续而是用next指针连接在一起,因此链表增删非首尾元素时不需要移动元素,只需要更改next的指向即可,在JavaScript中可以利用Object来模拟链表。
本教程操作环境:windows10系统、javascript1.8.5版、Dell G3电脑。
javascript中有链表吗
javascript中没有链表
什么是链表?
链表是多个元素组成的列表
元素存储不连续,用next指针连接到一起
JS中没有链表,但是可以用Object模拟链表
常用操作
新增节点 append
删除节点 remove
插入节点 insert
获取索引 indexOf
链表转字符串 toString
获取链表长度 size
判断链表是否为空 isEmpty
数组 VS 链表
数组: 增删非首尾元素时往往需要移动元素
链表:增删非首尾元素,不许要移动元素,只需要更改next的指向即可。
示例如下:
JavaScript没有直接的链表实现,以下是自己对链表的简单实现
function LinkedList(){ var Node = function(element){ this.element = element; this.next = null; } var head = null; var length = 0; // 定义append方法 this.append = function(element){ var node = new Node(element), current; // 当head为空时,就将新增的node作为head if(head === null){ head = node }else{ // 当head不为空时,将head赋值为当前值,通过判断当前值的next值是否存在遍历整个链表 current = head; while(current.next){ current = current.next; } // 遍历到链表的最后一项时,设置最后一项的next为新增的内容 current.next = node } // 每新增一项,length都加1操作 length++; } // 定义toString方法 this.toString = function(){ var string = '', current = head; // 最初将当前值定位到头部,当current存在时,将current的值添加到需要返回的string中,之后将current取为链表下一个值 while(current){ string += current.element + ( current.next ? ',' : ''); current = current.next } // 遍历完整个链表之后返回string return string; } this.removeAt = function(position){ // 当指定的位置没有在链表的长度范围内时直接返回null if(position > -1 && position < length){ var current = head, index = 0, previous; // 指定为值是第一个时就将head移到下一个位置 if(position === 0){ head = current.next }else{ // 通过遍历的方式将current移动到指定位置,使用index记录移动的距离 while(index < position){ previous = current; current = current.next; index++; } // 删除是通过将指定位置的上一个节点的next指向指定位置的下一个节点 previous.next = current.next } // 一旦删除成功需要将长度减一并返回删除的值 length--; return current.element; } return null; } // 实现插入功能 this.insert = function(position,element){ // 插入的位置不在链表范围内时返回false if(position > -1 && position <= length){ var current = head, index = 0, node = new Node(element), previous; // 插入内容在头部时将插入的node的next指定为current,current此时为head,然后将head指定为插入的node if(position === 0){ node.next = current; head = node; }else{ // 通过遍历的方式将指针指定到插入的位置,index记录当前移动的位置 while(index < position){ previous = current; current = current.next index++ } // 插入元素通过将插入位置的上一个元素的next指向插入的节点,并将插入的节点的next指向当前节点 previous.next = node; node.next = current; } // 插入成功之后length加1 length++; return true; } return false } // 实现查找指定element的index的功能 this.indexOf = function(element){ var index = 0, current = head; // 通过遍历的方式寻找指定元素所在的位置. // 当前节点存在时,判断当前节点的element是否为需要寻找的element,如果是就返回此时的index,如果不是就继续向下遍历节点 // 当存在两个相同内容时只会返回第一个index while(current){ if(current.element === element){ return index; } current = current.next; index++; } return -1; } }
实现之后进行如下调用:
var linkedList = new LinkedList(); linkedList.append(15); linkedList.append(10); linkedList.insert(1,2) // true linkedList.insert(2,2) // true linkedList.toString() // "15,2,2,10" linkedList.removeAt(3) // 10 linkedList.toString() // "15,2,2" linkedList.indexOf(2) // 1
【相关推荐:javascript视频教程、web前端】
以上就是javascript中有链表吗的详细内容,更多请关注站长家园其它相关文章!
本文标签: javascript
转载请注明来源:javascript中有链表吗
本文永久链接地址:https://www.adminjie.com/post/13549.html
免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
附:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!
版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的部分源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,若有侵犯你的权益请:提交版权证明文件到邮箱 2225329873#qq.com(#换为@) 站长会进行审查之后,情况属实的会在三个工作日内为您删除。
更多精彩内容
- VUE中V-IF条件判断改变元素的样式操作
- Discuz如何解决安装时报错run_sql_error
- 低版本VS项目在VS2019无法正常编译的问题
- PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
- Oracle数据库的实例/表空间/用户/表之间关系简单讲解
- RSA2是啥?PHP-RSA2签名验证怎么实现?
- 华为dubal20是什么型号
- app是什么应用程序的简称
- 小程序大小超限除了分包还能怎么做?如何避免和解决大小限制?
- ana an00华为是什么型号
- 电脑显示信号线无连接是什么意思
- html5中onclick是什么意思
- 超清视效是什么意思
- vivov1818a是什么手机型号
- html5的标题标记一共有几个等级

- 最新文章
-
-
php中restful风格是什么意思
php中restful风格指的是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义;RESTFUL适用于移动互联网厂商...
-
php中preg_replace怎么替换变量数据
在php中,“preg_replace”函数可以执行一个正则表达式的搜索和替换来替换变量数据,语法为“preg_replace(规定搜索的模式,用于替换的字符串...
-
vue抽象语法树和虚拟dom的区别是什么
vue抽象语法树和虚拟dom的区别:1、抽象语法树指的是源代码语法结构的一种抽象表示,而虚拟dom本质上就是一个普通的JS对象,用于描述视图的界面结构;2、虚拟...
-
vue3和vue2的语法有什么区别
vue3和vue2的语法区别:1、vue2使用的是webpack形式去构建项目,而vue3使用vite构建项目;2、vue2中可以使用pototype的形式去进...
-
66个面试问题,带你梳理MySQL知识点!数据库架构存储引擎日志SQL 优化索引锁事务高可用/性能运维
作为SQLBoy,基础部分不会有人不会吧?面试也不怎么问,基础掌握不错的小伙伴可以跳过这一部分。当然,可能会现场写一些SQL语句,SQ语句可以通过牛客、Lee...
-
- 热门文章
-
-
VUE中V-IF条件判断改变元素的样式操作
这篇文章主要介绍了VUE中V-IF条件判断改变元素的样式操作,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧...
-
Discuz如何解决安装时报错run_sql_error
问题环境VMware虚拟机Centos7.3PHP7.0MySQL8.0NGINX1.14Discuz3.4问题还原本地环境为PHP5.6+MySQL5.6在安...
-
低版本VS项目在VS2019无法正常编译的问题
低版本VS项目在VS2019无法正常编译的问题这里指的编译并不准确,只是为了方便说明。后有(未安装),201?...
-
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
实现原理使用redis链表来做,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用。实现步骤第一步,先将商品库存入队列/**.trigge...
-
Oracle数据库的实例/表空间/用户/表之间关系简单讲解
完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。Oracle是一种数据库管理系统,是一种关系型的数据库管理系统。我们用这些高级权限账号...
-