这是我参与更文挑战的第2天,活动详情查看: 更文挑战
数组
数组特性:
- 存储在物理空间上是连续。
- 底层的数组长度是不可变的。
- 数组的变量,指向了数组第一个元素的位置。
a[0],a[1]方括号表示存储地址的偏移。里面的数字表示偏移多少个位置 优点:查询性能好。(指定查询某个位置。)
缺点:
- 因为空间必须是连续的,所以如果数组比较大,当系统的空间碎片比较多时,容易存不下。
- 因为数组长度是固定的,所以数组的内容难以被添加和删除。
链表
如果想传递一个链表,必须传递链表的根节点,每一个节点,都认为自己是根节点。
链表的特点:
空间上不是连续的。
每存一个值,都要开销一个引用空间。
优点:
只要内存够大,就能存的下,不用担心空间碎片的问题。
链表的添加和删除非常的容易。
缺点:
查询速度慢(指的是查询某个位置。)
链表上的每一个节点都需要创建一个指向next的引用,浪费一些空间。(当节点内数据越多的时候,这部分开销的内存影响越少。)
遍历
遍历:将一个集合中的每一个元素进行获取并查看。
数组的递归遍历:
var arr = [1,2,3,4,5,6,7,8];
function bianArr(arr,i){
if (arr != null || arr.length <= 1) return;
console.log(arr[i]);
bainArr(arr, i + 1);
}
bainArr(arr,0);
链表的递归遍历:
function Node (value){
this.value = value;
this.next = null;
}
var node1 = new Node(1);
var node2 = new Node(2);
var node3 = new Node(3);
var node4 = new Node(4);
var node5 = new Node(5);
node1.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
function bainLink(root){
if(root == null) return;
console.log(root.value);
bainLink(root.next);
}
bainLink(node1);