前端算法
1. 线性数据结构之数组
1. 一维数据结构:(线性数据结构)
2. 线性的数据结构强调存储于顺序
3. 数组特性:
1. 存储在物理空间上是连续的
2. 底层的数组长度是不可变的
3. 数组的变量,指向了数组的第一个元素的位置。
- 数组 a = {1,2,3,4,5};
- a[1],a[2],a[3] 方括号表示存储地址的偏移
- 操作系统小知识:通过偏移查询数据性能最好
4. 数组有一个很大的特性:数组定长
1. 内存的分配都是操作系统给分配的
2. 在运行中不要发生数组扩容的情况,因为会消耗性能
-
数组的优缺点:
-
优点:查询性能好,指定查询某个位置。
-
缺点
1:因为空间必须得是连续的,所以如果数组比较大,当系统的空间碎片较多的时候,容易存不下
空间碎片:我们用的电脑上的每一个程序,每一个软件,都需要声明变量,声明的变量就需要占用系统的存储空间当声明的时候,系统都是按照顺序分配空间,但是有可能某个位置不再用了 ,清空了,那么第二个位置就会空出来,此时有空位,按理说有些长度的数组可以放得下,但是数组必须得是连续的,但是存储空间的位置不是连续的,这种小的空闲的空间就称之为空间碎片
但是系统为了能够使用户能够存下,就会整理空间,也就会耗费CPU,耗费性能,所以要避免数组过大
2:因为数组的长度是固定的,所以数组的内容难以被添加和删除。
-
2. 线性数据结构之链表
一般我们所说的链表指的就是单链表
-
链表的特点:
- 空间上是不连续的。
2. 每存放一个值,都要多开销一个引用空间
- 空间上是不连续的。
-
链表的优缺点:
优点:
-
只要内存足够大,就能存的下,不用担心空间碎片的问题。
-
链表的添加和删除非常的容易
缺点:
-
查询速度慢,(指的是查询某个位置)
-
链表每一个节点都需要创建一个指向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); console.log(a.next.value); console.log(a.next.next.value); console.log(a.next.next.next.value);
-
后面持续更新