上一篇:
前端必会算法——线性数据结构之数组
线性数据结构之链表
链表是常见的带有封装性质的数据结构。
小方块是用来存放数据的,箭头是
这个数据结构是由两个部分组成,其中一个部分存的是数据,另一个部分存的引用(下一个块的首地址)。
a存了b的引用(在C语言中叫指针,面向对象语言中叫引用),通过a可以找到b,但是b并不是在a里面,只是a里面有个属性指向b。
代码实现
var b = {
value: 2,
next: null,
};
/**
* a是一个对象,
* 对象里有两个属性:
* 一个是它的值,
* 另一个是下一个,
* 通俗来讲,a的值为1,下一个为b
*
* b不是a的一部分,不是嵌套关系,而是引用关系。
*/
var a = {
value: 1,
next: b,
};
console.log(a.next === b); //true
链表的特点:
- 空间上不是连续的。
- 每存放一个值,都要多开销一个引用空间。
优点:
- 只要内存空间足够大,就能存的下,不用担心空间碎片的问题。
- 链表的添加和删除非常的容易。
缺点:
- 查询速度慢,(指的查询某个位置。)
- 链表每一个节点都需要创建一个指向next的引用,浪费一些空间。当节点内数据越来越多的时候,这部分多开销的内存影响越少。
我想传递一个链表,我必须传递链表的根节点。
每一个节点,都认为自己是根节点(起始节点)
链表的创建
function Node(value) {
this.value = value;
this.next = null;
}
var a = new Node(1);
var b = new Node(2);
var c = new Node(3);
var d = new Node(4);
a.next = b;
b.next = c;
c.next = d;
d.next = null;
console.log(a.value);//1
console.log(a.next.value);//2
console.log(a.next.next.value);//3
console.log(a.next.next.next.value);//4
下一篇:
前端必会算法——线性数据结构的遍历