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中判断一个值是否在数组中并没有直接使用
Dec 17 Javascript
js操作checkbox遇到的问题解决
Jun 29 Javascript
html文件中jquery与velocity变量中的$冲突的解决方法
Nov 01 Javascript
javascript实现复选框选中属性
Mar 25 Javascript
BootStrap中Tab页签切换实例代码
May 30 Javascript
AngularJs  E2E Testing 详解
Sep 02 Javascript
jQuery事件用法详解
Oct 06 Javascript
微信小程序 地图map详解及简单实例
Jan 10 Javascript
JavaScript实现QQ聊天消息展示和评论提交功能
May 22 Javascript
微信小程序实现导航栏选项卡效果
Jun 19 Javascript
微信小程序自定义组件之可清除的input组件
Jul 17 Javascript
Vue 图片压缩并上传至服务器功能
Jan 15 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防盗链代码实例
2014/08/27 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
php微信公众号开发之答题连闯三关
2018/10/20 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
js播放wav文件(源码)
2013/04/22 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
javascript读写json示例
2014/04/11 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
JavaScript实现移动端滑动选择日期功能
2016/06/21 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
javascript 中的try catch应用总结
2017/04/01 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
2017/07/11 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Python的collections模块中namedtuple结构使用示例
2016/07/07 Python
磁盘垃圾文件清理器python代码实现
2020/08/24 Python
Python操作Mongodb数据库的方法小结
2019/09/10 Python
python上selenium的弹框操作实现
2020/07/13 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
System.Array.CopyTo()和System.Array.Clone()有什么区别
2016/06/20 面试题
绝对经典成功的大学生推荐信
2013/11/08 职场文书
社区母亲节活动记录
2014/03/06 职场文书
经典促销广告词大全
2014/03/19 职场文书
打架检讨书
2015/01/27 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
小学体育课教学反思
2016/02/16 职场文书