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 相关文章推荐
Javascript 入门基础学习
Mar 10 Javascript
浅析jQuery的链式调用之each函数
Dec 03 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
Jun 20 Javascript
JavaScript 七大技巧(二)
Dec 13 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
Oct 25 Javascript
学习vue.js条件渲染
Dec 03 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
Mar 27 jQuery
《javascript少儿编程》location术语总结
May 27 Javascript
详解Vue结合后台的列表增删改案例
Aug 21 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
Sep 24 Javascript
优化Vue中date format的性能详解
Jan 13 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
Jul 26 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做下载文件的实现代码及文件名中乱码解决方法
2011/02/03 PHP
解析PHP实现下载文件的两种方法
2013/07/05 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
js获取当前月的第一天和最后一天的小例子
2013/11/18 Javascript
jquery mobile的触控点击事件会多次触发问题的解决方法
2014/05/08 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
2015/11/20 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
Vue实现验证码功能
2019/12/03 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
django 捕获异常和日志系统过程详解
2019/07/18 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
求职信内容考虑哪几点
2013/10/05 职场文书
会计电算化个人求职信范文
2014/01/24 职场文书
乡镇安全生产目标责任书
2014/07/23 职场文书
淘宝好评语句大全
2014/12/31 职场文书
国际贸易实训总结
2015/08/03 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书
导游词之镜泊湖
2019/12/09 职场文书