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 相关文章推荐
利用json获取字符出现次数的代码
Mar 22 Javascript
动态载入js提高网页打开速度的方法
Jul 04 Javascript
jquery插件ajaxupload实现文件上传操作
Dec 09 Javascript
实例详解AngularJS实现无限级联动菜单
Jan 15 Javascript
Bootstrap3学习笔记(二)之排版
May 20 Javascript
jQuery实现表格冻结顶栏效果
Aug 20 jQuery
Vue 拦截器对token过期处理方法
Jan 23 Javascript
浅谈vuex actions和mutation的异曲同工
Dec 13 Javascript
layui form.render('select', 'test2') 更新渲染的方法
Sep 27 Javascript
Node如何后台数据库使用增删改查功能
Nov 21 Javascript
JS实现音乐钢琴特效
Jan 06 Javascript
JavaScript 事件代理需要注意的地方
Sep 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数组
2006/10/09 PHP
在WordPress中使用PHP脚本来判断访客来自什么国家
2015/12/10 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
JavaScript插件化开发教程 (二)
2015/01/27 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
js倒计时抢购实例
2015/12/20 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
英国领先的维生素和补充剂品牌:Higher Nature
2019/08/26 全球购物
如何获得EntityManager
2014/02/09 面试题
Unix如何在一行中运行多个命令
2015/05/29 面试题
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
自主招生教师推荐信
2014/05/10 职场文书
领导班子整改方案
2014/10/25 职场文书
会计实训报告范文
2014/11/04 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
任命书格式范文
2015/09/22 职场文书
python实现Nao机器人的单目测距
2021/09/04 Python
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL