在js中有三种常用的数据结构是我们必须了解的,他们分别是栈(stack)、堆(heap)、队列(queue),下面分别做介绍。
栈(stack)
基础定义:
- 1.栈是一种数据结构,它表达的是数据的一种存取方式.
- 2.栈可用来规定代码的执行顺序,函数调用在js中叫做函数调用栈(call stack).
- 3.栈表达的是一种数据在内存中的存储区域.
栈的存取方式遵循 先进后出后进先出 (LIFO) 的原则,学习它的最终目的是掌握函数调用栈的运行方式,下面可通过往容器里存取小球的图例理解栈的存取方式:
如上图中,往容器中一次放入小球,最先放进去的在最底下(栈底),最后放进去的在最上方(栈顶)。当我们取出的时候,很明显需要我们先取出顶部(栈顶)的小球,才能依次取出下方(栈底)的。这种存取方式就是栈数据结构的的存取特点:先进后出,后进先出原则。
其中在数组(Array)中有两个栈方法映射了这种存取方式,分别是:
- push: 向数组末尾添加元素(进栈方法)
- pop: 弹出数据最末尾的一个元素(出栈方法)
堆(heap)
堆数据结构通常是一种树状结构,他的存取方式类似于书架上取书,无需关心存放顺序。
该图可用字面量的形式体现出来:
var Heap = {
a: 10,
b: 20,
c: {
m: 300,
n: 400
}
}
当我们想访问a时,只需通过Heap.a来访问即可,而不用关心它所在的顺序。
队列(queue)
队列是一种 先进先出(FIFO) 的数据结构,就像排队过安检,排在队伍最前边的人一定是最先过安检的人。
理解队列数据结构的目的是:为了搞清楚事件循环机制(Event Loop)。
下面可以通过图例来理解队列的存取原理: