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代码
Nov 20 Javascript
JavaScript事件委托技术实例分析
Feb 06 Javascript
JS动态改变表格边框宽度的方法
Mar 31 Javascript
jQuery获取元素父节点的方法
Jun 21 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
Nov 25 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
May 31 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
Oct 18 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 Javascript
vue数据传递--我有特殊的实现技巧
Mar 20 Javascript
前端axios下载excel文件(二进制)的处理方法
Jul 31 Javascript
react中使用css的7中方式(最全总结)
Feb 11 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
May 13 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/04/09 欧美动漫
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
同时提取多条新闻中的文本一例
2006/10/09 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
jQuery插件开发全解析
2012/10/10 Javascript
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
JavaScript返回上一页的三种方法及区别介绍
2015/07/04 Javascript
详解javascript new的运行机制
2016/01/26 Javascript
JavaScript判断DIV内容是否为空的方法
2016/01/29 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
微信小程序实现根据字母选择城市功能
2017/08/16 Javascript
详解JavaScript对数组操作(添加/删除/截取/排序/倒序)
2019/04/28 Javascript
jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】
2019/06/06 jQuery
环形加载进度条封装(Vue插件版和原生js版)
2019/12/04 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
Python通过websocket与js客户端通信示例分析
2014/06/25 Python
python代码制作configure文件示例
2014/07/28 Python
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
如何在python中判断变量的类型
2020/07/29 Python
室内设计实习自我鉴定
2013/09/25 职场文书
《只有一个地球》教学反思
2014/02/14 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
车间安全生产管理制度
2015/08/06 职场文书
Python实现自动玩连连看的脚本分享
2022/04/04 Python