JavaScript数据结构链表知识详解
2016-11-22 00:00
357 查看
存储有序的元素集合,但不同于数组,链表中的元素在内存中不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。下面通过本文给大家详细介绍下,需要的朋友参考下
最近在看《javascript数据结构和算法》这本书,补一下数据结构和算法部分的知识,觉得自己这块是短板。
链表:存储有序的元素集合,但不同于数组,链表中的元素在内存中不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。
好处:可以添加或移除任意项,它会按需扩容,且不需要移动其他元素。
与数组的区别:
数组:可以直接访问任何位置的任何元素;
链表:想要访问链表中的一个元素,需要从起点(表头)开始迭代列表直到找到所需的元素。
做点小笔记。
最近在看《javascript数据结构和算法》这本书,补一下数据结构和算法部分的知识,觉得自己这块是短板。
链表:存储有序的元素集合,但不同于数组,链表中的元素在内存中不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。
好处:可以添加或移除任意项,它会按需扩容,且不需要移动其他元素。
与数组的区别:
数组:可以直接访问任何位置的任何元素;
链表:想要访问链表中的一个元素,需要从起点(表头)开始迭代列表直到找到所需的元素。
做点小笔记。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | 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数据结构之双链表插入排序实例详解
- javaScript数据结构 栈 队列 链表基础知识
- javascript数据结构之双链表插入排序实例详解
- JavaScript系列文章:详解正则表达式基本知识
- 关于javascript的一些知识以及循环详解
- javascript知识详解之8张思维导图
- javascript知识详解之8张思维导图
- Redis内部数据结构详解之压缩链表(ziplist)
- JavaScript数据结构之单向循环链表应用-约瑟夫问题
- JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
- javascript实现数据结构:稀疏矩阵的十字链表存储表示
- 数据结构链表知识整合
- 数据结构JavaScript——双向链表、双向循环链表
- 数据结构JavaScript——单链表、循环链表
- javascript数据结构5-链表(包括循环链表 双向链表)
- JavaScript数据结构和算法之二叉树详解
- javascript知识详解
- Java基础知识强化之集合框架笔记21:数据结构之 数组 和 链表
- JavaScript基础知识之——Location 对象详解