一维数据结构(线性数据结构)
线性的数据结构强调存储与顺序.
数组和链表
一、数组
var a = [1,2,3,4,5,6]
a[1] , a[2] , a[3] 方括号表示存储地址的偏移.
操作系统小知识:通过偏移查询数据性能最好.
数组的特性:
- 存储在物理空间上是连续的.
- 底层的数组长度是不可变的.
- 数组的变量 , 指向了数组第一个元素的位置.
优点:
查询性能好 , 指定某个位置.
缺点:
- 因为空间必须是连续得是连续的 , 所以如果数组比较大 , 当系统的空间碎片较多的时候 , 容易存不下.
- 因为数组的长度是固定的 , 所以数组的内容难以被添加和删除.
二、链表
注:其中的箭头指的就是引用,第一个节点空间存储了一个值和下一个存储空间的地址引用 .
链表的特点:
- 空间上不是连续的.
- 每存放一个值 , 都要多开销一个引用空间.
注:我想传递一个链表,我必须传递链表的根节点
每一个节点 , 都认为自己是根节点
优点:
- 只要内存足够大 , 就能存的下 , 不用担心空间碎片的问题
- 链表的添加和删除非常的容易
缺点:
- 查询速度慢(指的查询某个位置)
- 链表的每一个节点都需要创建一个指向next的引用 , 浪费一些空间 . 当节点内数据越多的时候 , 这部分多开销的内存影响越少
列:
function Node(value) {
this.value = value;
this.next = null;
}
var a = new Node(1);
var b = new Node(2);
a.next = b;
console.log(a.next.value); //2
console.log(a.next == b); //true
</script>