堆(heap),栈(stack)与队列(queue)

栈(stack)的三种含义  

含义一:数据结构 stack的第一种含义是一组数据的存放方式,特点为LIFO,即后进先出(Last in, first out)。

含义二:代码运行方式  stack的第二种含义是"调用栈"(call stack),表示函数或子例程像堆积木一样存放,以实现层层调用。

含义三:内存区域  stack的第三种含义是存放数据的一种内存区域。程序运行的时候,需要内存空间存放数据。一般来说,系统会划分出两种不同的内存空间:一种叫做stack(栈),另一种叫做heap(堆)。


数据结构是计算机存储、组织数据的方式 ,

栈和队列的实现可以用顺序存储结构或链式存储结构.

顺序存储结构:顺序支持随机存取,方便操作

链式存储结构:本质上就是一个链表,插入和删除上,链式的要比顺序的方便


堆(heap),栈(stack)与队列(queue)

堆(heap) 堆数据结构

堆数据结构是一种树状结构。它的存取数据的方式,则与书架与书非常相似,将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。一般由程序员分配释放, 若程序员不释放,程序结束时可能被回收,分配方式倒是类似于链表。堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

引用类型是保存在堆内存中的对象

栈(stack) 又名堆栈

类似乒乓球桶,先进后出,后进先出,由操作系统自动分配释放 ,一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放。

基本类型是保存在栈内存中的简单数据段,它们的值都有固定的大小,保存在栈空间,通过按值访问,JavaScript中有6种基础数据类型,分别是Undefined、Null、Boolean、Number、String,Symbol


队列

队列是一种先进先出(FIFO)的数据结构。正如排队过安检一样,排在队伍前面的人一定是最先过检的人。用以下的图示可以清楚的理解队列的原理。




在变量对象中的数据发生复制行为时,系统会自动为新的变量分配一个新值。var b = a执行之后,a与b虽然值都等于20,但是他们其实已经是相互独立互不影响的值了。我们通过var n = m执行一次复制引用类型的操作。引用类型的复制同样也会为新的变量自动分配一个新的值保存在变量对象中,但不同的是,这个新的值,仅仅只是引用类型的一个地址指针。当地址指针相同时,尽管他们相互独立,但是在变量对象中访问到的具体对象实际上是同一个。如图所示。因此当我改变n时,m也发生了变化。这就是引用类型的特性。

你可能感兴趣的:(堆(heap),栈(stack)与队列(queue))