JavaScript数据结构链表知识详解


Posted in Javascript onNovember 21, 2016

最近在看《javascript数据结构和算法》这本书,补一下数据结构和算法部分的知识,觉得自己这块是短板。

链表:存储有序的元素集合,但不同于数组,链表中的元素在内存中不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。

好处:可以添加或移除任意项,它会按需扩容,且不需要移动其他元素。

与数组的区别:

    数组:可以直接访问任何位置的任何元素;

    链表:想要访问链表中的一个元素,需要从起点(表头)开始迭代列表直到找到所需的元素。

做点小笔记。

function LinkedList(){
var Node = function(element){
this.element = element
this.next = null
}
var length = 0
var head = null
this.append = function(element){
var node = new Node(element)
var current
if(head == null){ //链表为空
head = node
}else{ //链表不为空
current = head
//循环链表,直到最后一项
while(current.next){
current = current.next
}
current.next = node
}
length ++ //更新链表长度
}
this.insert = function(position,element){
var node = new Node(element)
var current = head
var previous
var index = 0
if(position>=1 && position<=length){ //判断是否越界
if(position === 0){ //插入首部
node.next = current
head = node
}else{
while(index++ < position){
previous = current
current = current.next
}
node.next = current
previous.next = node
}
length ++ //更新链表长度
return true
}else{
return false
}
}
this.indexOf = function(element){
var current = head
var index = -1
while(current){
if (element === current.element) {
return index
}
index++
current = current.next
}
return -1
}
this.removeAt = function(position){
if(position>-1 && position<length){ //判断是否越界
var current = head
var previous
var index = 0
if(position === 0){ //移除第一个元素
head = current.next
}else{
while(index++ < position){
previous = current
current = current.next
}
previous.next = current.next //移除元素
}
length -- //更新长度
return current.element
}else{
return null
}
}
this.remove = function(element){
var index = this.indexOf(element)
return this.removeAt(index)
}
this.isEmpty = function(){
return length == 0
}
this.size = function(){
return length
}
this.toString = function(){
var current = head
var string = ""
while(current){
string = "," + current.element
current = current.next
}
return string.slice(1)
}
this.getHead = function(){
return head
}
}

以上所述是小编给大家介绍的JavaScript数据结构链表知识详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
jQuery 关于伪类选择符的使用说明
Apr 24 Javascript
jQuery下的动画处理总结
Oct 10 Javascript
在Firefox下js select标签点击无法弹出
Mar 06 Javascript
jQuery插件实现控制网页元素动态居中显示
Mar 24 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
Nov 19 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
May 28 Javascript
JavaScript中关键字 in 的使用方法详解
Oct 17 Javascript
Bootstrap modal使用及点击外部不消失的解决方法
Dec 13 Javascript
浅谈webpack-dev-server的配置和使用
May 17 Javascript
JavaScript 高性能数组去重的方法
Sep 20 Javascript
vue路由守卫+登录态管理实例分析
May 21 Javascript
JS实现简易留言板增删功能
Feb 08 Javascript
jQuery简单自定义图片轮播插件及用法示例
Nov 21 #Javascript
Node.js测试中的Mock文件系统详解
Nov 21 #Javascript
JavaScript中boolean类型之三种情景实例代码
Nov 21 #Javascript
基于jQuery实现Tabs选项卡自定义插件
Nov 21 #Javascript
基于jQuery实现Accordion手风琴自定义插件
Oct 13 #Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
Nov 21 #Javascript
js原生实现FastClick事件的实例
Nov 20 #Javascript
You might like
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
PHP高并发和大流量解决方案整理
2021/03/09 PHP
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
使用微信内置浏览器点击下拉框出现页面乱跳转现象(iphone),该怎么办
2016/01/04 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
js 博客内容进度插件详解
2017/02/19 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
用户管理的设计_jquery的ajax实现二级联动效果
2017/07/13 jQuery
浅谈Angular7 项目开发总结
2018/12/19 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
[01:35:13]DOTA2-DPC中国联赛 正赛 DLG vs PHOENIX BO3 第一场 1月18日
2021/03/11 DOTA
编写Python的web框架中的Model的教程
2015/04/29 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
详解在Python的Django框架中创建模板库的方法
2015/07/20 Python
matplotlib实现热成像图colorbar和极坐标图的方法
2018/12/13 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
美国时尚女装在线:Missguided
2016/12/03 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
高一数学教学反思
2014/02/07 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
民事调解协议书
2016/03/21 职场文书
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
javascript中Set、Map、WeakSet、WeakMap区别
2022/12/24 Javascript