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 相关文章推荐
Some tips of wmi scripting in jscript (1)
Apr 03 Javascript
json简单介绍
Jun 10 Javascript
jQuery前端框架easyui使用Dialog时bug处理
Dec 05 Javascript
javascript和jquery实现用户登录验证
May 04 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
Mar 26 Javascript
原生js获取元素样式的简单方法
Aug 06 Javascript
javascript验证香港身份证的格式或真实性
Feb 07 Javascript
详解如何在Vue2中实现组件props双向绑定
Mar 29 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
Jun 09 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
Oct 31 Javascript
详解Javascript中new()到底做了些什么?
Mar 29 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
Nov 05 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
从C/C++迁移到PHP——判断字符类型的函数
2006/10/09 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
2018/09/04 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
基于jQuery倒计时插件实现团购秒杀效果
2016/05/13 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
jQuery对table表格进行增删改查
2020/12/22 Javascript
js仿QQ邮箱收件人选择与搜索功能
2017/02/10 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
清空元素html(&quot;&quot;) innerHTML=&quot;&quot; 与 empty()的区别和应用(推荐)
2017/08/14 Javascript
彻底搞懂JavaScript中的apply和call方法(必看)
2017/09/18 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
详解package.json版本号规则
2019/08/01 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
2018/10/15 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
Python之字典对象的几种创建方法
2020/09/30 Python
Django项目在pycharm新建的步骤方法
2021/03/02 Python
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
记者岗位职责
2014/01/06 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
2015年九一八事变纪念日演讲稿
2015/03/19 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书