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 相关文章推荐
js文字滚动停顿效果代码
Jun 28 Javascript
javascript 内存回收机制理解
Jan 17 Javascript
javascript测试题练习代码
Oct 10 Javascript
javascript中String对象的slice()方法分析
Dec 20 Javascript
JavaScript中对象property的读取和写入方法介绍
Dec 30 Javascript
使用jQuery管理选择结果
Jan 20 Javascript
javascript产生随机数方法汇总
Jan 25 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
Mar 30 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
Oct 08 Javascript
Bootstrap基本样式学习笔记之按钮(4)
Dec 07 Javascript
react中的ajax封装实例详解
Oct 17 Javascript
原生js拖拽实现图形伸缩效果
Feb 10 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
极典R601SW收音机
2021/03/02 无线电
让PHP支持页面回退的两种方法[转]
2007/02/14 PHP
PHP安全性漫谈
2012/06/28 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
2013/07/05 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
php ckeditor上传图片文件名乱码解决方法
2013/11/15 PHP
PHP把小数转成整数3种方法
2014/06/30 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之二
2011/12/31 Javascript
js猜数字小游戏的简单实现代码
2013/07/02 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
轻松掌握JavaScript策略模式
2016/08/25 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
JS中的回调函数实例浅析
2018/03/21 Javascript
Bootstrap标签页(Tab)插件切换echarts不显示问题的解决
2018/07/13 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
python转换摩斯密码示例
2014/02/16 Python
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
Python 错误和异常代码详解
2018/01/29 Python
解决Python网页爬虫之中文乱码问题
2018/05/11 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
如何基于python对接钉钉并获取access_token
2020/04/21 Python
Python虚拟环境venv用法详解
2020/05/25 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
《藤野先生》教学反思
2014/02/19 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS
Python基本的内置数据类型及使用方法
2022/04/13 Python