美文网首页
堆、栈、队列 (18-12-25)

堆、栈、队列 (18-12-25)

作者: 你滴止痛药儿 | 来源:发表于2018-12-25 15:18 被阅读0次

堆数据结构

堆数据结构是一种树状结构。他的存储方式就像书架和书类似。我们只需要知道书的名字就可以把它取出来,并不需要把上面的书取出来。JSON格式的数据中存储的Key-Value可以是无序的,因为顺序不同并不影响我们使用,只需关注书的名字。

栈数据结构
栈的结构就是先进先出(LIFO) image.png
队列
队列是一种先进先出(FIFO)的数据结构 image.png
变量的存放

1、基本类型:保存在栈内存中,因为这些类型在内存中有固定的大小空间,通过按值来访问。基本类型有:String、Numbe、Null、Undefind、Boolean、Symbol

2、引用数据类型:保存在堆内存中,因为这种值大小不固定,因此不能保存在栈内存,但内存地址大小是固定的因此保存在堆内存中,在栈内存中存放的只是该对象的访问地址。当查询引用类型的变量时, 先从栈中读取内存地址, 然后再通过地址找到堆中的值。对于这种,我们把它叫做按引用访问。 image.png
在计算机的数据结构中,栈比堆的运算速度快,Object是一个复杂的结构且可以扩展:数组可扩充,对象可添加属性,都可以增删改查。将他们放在堆中是为了不影响栈的效率。而是通过引用的方式查找到堆中的实际对象再进行操作。所以查找引用类型值的时候先去栈查找再去堆查找。

几个问题:

var a = 20;
var b = a;
b = 30;
// 这时a的值是多少?

var a = { name: '前端开发' }
var b = a;
b.name = '进阶';
// 这时a.name的值是多少

var a = { name: '前端开发' }
var b = a;
a = null;
// 这时b的值是多少

现在来解答一下,三个问题的答案分别是20、‘进阶’、{ name: '前端开发' }

  • 对于问题1,a、b都是基本类型,它们的值是存储在栈中的,a、b分别有各自独立的栈空间,所以修改了b的值以后,a的值并不会发生变化。
  • 对于问题2,a、b都是引用类型,栈内存中存放地址指向堆内存中的对象,引用类型的复制会为新的变量自动分配一个新的值保存在变量对象中,但只是引用类型的一个地址指针而已,实际指向的是同一个对象,所以修改b.name的值后,相应的a.name也就发生了改变。
  • 对于问题3,首先要说明的是null是基本类型,a = null之后只是把a存储在栈内存中地址改变成了基本类型null,并不会影响堆内存中的对象,所以b的值不受影响。

转自 木易杨https://github.com/yygmind/blog/issues/14


补充:闭包中的变量并不保存中栈内存中,而是保存在堆内存中,这也就解释了函数之后之后为什么闭包还能引用到函数内的变量。

相关文章

  • 堆、栈、队列 (18-12-25)

    堆数据结构 堆数据结构是一种树状结构。他的存储方式就像书架和书类似。我们只需要知道书的名字就可以把它取出来,并不需...

  • 堆\栈\队列

    堆和栈区别总结: 一 堆栈空间分配: 栈(操作系统): 由操作系统自动分配释放,存放函数的参数值,局部变量的值等....

  • 堆、栈、队列

    堆:什么是堆?又该怎么理解呢?①堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:·堆中某个节点的值总是...

  • 【Javascript】探究javascript中的堆/栈/任务

    堆/栈/队列 在javascript中,存在调用栈 (call stack)和内存堆(memory heap) ,...

  • 【 数据结构 & 算法 】—— 栈、队列、堆

    < 思维导图 > 预备知识:STL stack(堆) 预备知识:STL queue(队列) 使用队列实现栈(栈、队...

  • SPL

    栈 SplStack 队列 SplQueue 堆 SplHeap 定长数组 SplFixedArray

  • 堆、栈和队列

    栈(stack)又叫堆栈是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端进行加入数...

  • 堆和栈(Heap and Stack)的区别!

    堆和栈最明显的区别是: 堆(Heap):队列优先,先进先出(FIFO—first in first out); 栈...

  • 算法面试通关-堆栈&队列《三》

    队列 FIFO 栈 FILO 优先队列用堆实现或者二叉查找树 0020-有效的括号0232-用栈实现队列0225-...

  • 栈&队列&堆&双端队列

    栈 栈是一种后进先出的数据结构,我们可以借助list来实现栈 队列 队列是一种先进先出的数据结构,我们可以借助li...

网友评论

      本文标题:堆、栈、队列 (18-12-25)

      本文链接:https://www.haomeiwen.com/subject/pvnxlqtx.html