有三种常用的数据结构是我们必须了解的,它们分别是棋( stack )、堆(heap )、队列( queue )
1.1栈
例:往乒乓球盒子中依次放入乒乓球,当想取出的时候,处于盒子顶层的乒乓球一定是最后被放入且最先被取出的,而想要使用最底层的乓乓球,则必须先将所有的乓乓球先取之后才能取出,但它是最早放入的.
这种乒乓球的存取方式与数据结构如出一辙。这种存取方式的特点可总结为先进后出,后进先出 (LIFO , Last In, First Out ),处于栈顶的数据 ,最后进栈,最先出栈。处于栈底的数据 ,最先进栈,最后出栈
JS中,数组提供了两个栈方法来对应栈的这两种存取方式,他们实践中十分常用。
push:向数组末尾添加元素(进栈方法)
push方法可以接收任意参数,并把它们逐个添加到数组末尾,并返回数组修改后的长度
let a=[]
a.push(1) // 1
a.push(2,3,4) //4
let len=a.push(5) //5
//a:[1,2,3,4,5]
pop:弹出数据末尾的一个元素(出栈方法)
pop方法会删除元素最末尾的一个元素,并返回
let a=[1,2,3]
a.pop() //3
1.2堆
堆数据结构通常是种树状结构
它的存取方式与在书架中取书的方式非常相似。书虽然整齐地摆放在书架上,但是只要知道书的名字,在书架中找到它之后就可以很方便地取出,我们甚至不用关心书的存放序,即不用像从乒乓球盒子中取乒乓球那样,必须将 些乒乓球拿出来之后才能取到中间的某个乒乓球
示意图
用字面量对象的形式体现出来
let tsetHeap={
a:10,
b:20,
c:{
m:100,
n:110
}
}
当我们想要访问 时,只需通过 testHeap.a 来访问即可,而不用关心 的具体顺序
1.3队列
在JavaScript 中,理解队列数据结构的目的是为了搞清楚事件循环( Event Loop )机制到底是怎么回事
队列(queue )是 种先进先出( FIFO )的数据结构 正如排队过安检 样,排在队伍前面
的人 定是最先过安检的人。 队列原理下图所示