JavaScript数据结构链表知识详解

 更新时间:2016年11月21日 08:52:19   作者:小少等等等  
存储有序的元素集合,但不同于数组,链表中的元素在内存中不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。下面通过本文给大家详细介绍下,需要的朋友参考下

最近在看《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数据结构链表知识详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Js中Symbol的静态属性及用途详解

    Js中Symbol的静态属性及用途详解

    JavaScript 语言在 ES6 规范中引入了 Symbol 类型,它是一种原始数据类型,用于创建唯一的标识符,本文将介绍 Symbol 类型的所有静态属性,并举例说明它们的用途和使用场景,希望对大家有所帮助
    2023-12-12
  • javascript中的 object 和 function小结

    javascript中的 object 和 function小结

    JavaScript的面向对象是基于原形的,所有对象都有一条属于自己的原型链。Object与Function可能很多看Object instanceof Function , Function instanceof Object都为true而迷惑,所以首先看下对象的实例。
    2016-08-08
  • JS中6个对象数组去重的方法

    JS中6个对象数组去重的方法

    这篇文章主要给大家介绍了关于JS中6个对象数组去重的方法,javascript数组去重是一个比较常见的需求,解决方法也有很多种,文中每种解决方法都给出了示例代码,需要的朋友可以参考下
    2023-07-07
  • JS实现HTML标签转义及反转义

    JS实现HTML标签转义及反转义

    本文主要介绍了JS实现HTML标签转义及反转义的方法。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • Angular+Bootstrap+Spring Boot实现分页功能实例代码

    Angular+Bootstrap+Spring Boot实现分页功能实例代码

    这篇文章主要介绍了Angular+Bootstrap+Spring Boot实现分页功能实例代码,需要的朋友可以参考下
    2017-07-07
  • AjaxUpLoad.js实现文件上传功能

    AjaxUpLoad.js实现文件上传功能

    这篇文章主要为大家详细介绍了AjaxUpLoad.js实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • JavaScript插件化开发教程(六)

    JavaScript插件化开发教程(六)

    本文是javascript插件化开发系列教程的第六篇文章,还是重点对上一篇文章不足的地方进行改进重构,逐步分析让大家能有一个新的认识,希望小伙伴们能够喜欢。
    2015-02-02
  • 微信小程序地图标记多个位置的方法详解

    微信小程序地图标记多个位置的方法详解

    地图是我们平时经常用到的组件,而且地图是显示在最高层的原生组件,下面这篇文章主要给大家介绍了关于微信小程序地图标记多个位置的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • js图片加载效果实例代码(延迟加载+瀑布流加载)

    js图片加载效果实例代码(延迟加载+瀑布流加载)

    本篇文章主要介绍了js图片加载效果实例代码(延迟加载+瀑布流加载),非常具有实用价值,需要的朋友可以参考下
    2017-05-05
  • js实现查询商品案例

    js实现查询商品案例

    这篇文章主要为大家详细介绍了js实现查询商品案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07

最新评论