欢迎关注掘金 https://juejin.cn/user/2551305355400797
数据结构与算法
数据结构与算法有什么关系?
可以容纳数据的结构称为数据结构
算法是用来对数据结构进行处理的方法 ;数据结构是静态的,算法是动态的
线性数据结构之数组
一维数据结构:(线性数据结构)
线性的数据结构强调存储与顺序
数组:底层上数组定长
数组特性:
- 存储在物理空间上是连续的
- 底层的数组长度是不可变的 (JS引擎做出优化导致学的是可变的)
- 数组的变量指向的是数组第一个元素的位置
var a={
1,2,3,4,5,6,7,8}
a[1], a[2], a[3] //方括号表示的是存储地址的偏移。
- 操作系统小知识:通过偏移查询数据性能最好
优点:查询性能最好。指定查询某个位置。
缺点:- 因为空间必须连续,所以如果数组比较大,当系统的空间碎片较多的时候,容易存不下
- 因为数组的长度是固定的,所以数组的内容难以添加和删除
深究操作系统课程
var a = [1,2,3,4,5];
var arr = new Array(10);//初始化数组长度
线性数据结构之链表
计算机四门专业课自学
演示demo
var b = {
value : 2,
next : null
}
// 实验得知:b要定义在a声明的前面
var a = {
value : 1,
next : b//不是嵌套关系,而是引用关系
}
console.log(a.next == b);//两个对象比较,比较的是地址
链表的特点:
- 空间上不是连续的。
- 每存放一个值,都要多开销一个引用空间。
优点:
单链表。我想传递一个链表,我必须传递链表的根节点。
每一个节点都认为自己是根节点(因为每个节点都记录自己和next)。
- 只要内存足够大,就能存的下,不用担心空间碎片的问题
- 链表的添加和删除非常容易
缺点:
- 查询速度慢。(查询某个位置)
- 链表每一个节点都需要创建一个指向next的引用,浪费一些空间。
- 当节点内数据越多的时候(即value越多),这部分多开销(即next)的内存影响较少。
创建链表
function Node(value){
this.value = value;
this.next = null