转载自:https://www.pianshen.com/article/54131761085/

1. 堆和栈

JavaScript中的变量分为基本类型和引用类型:

  • 基本类型是保存在栈内存中的简单数据段,它们的值都有固定的大小,每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和自动释放,通过按值访问。

  • 引用类型是保存在堆内存中的对象,值大小不固定,栈内存中存放的该对象的访问地址指向堆内存中的对象,JavaScript不允许直接访问堆内存中的位置,因此操作对象时,实际操作对象的引用。

所以对于堆和栈;

  • 栈:栈是一种线性的数据结构,读取规则是先进后出。栈中的数据占用的内存空间的大小是确定的,便于代码执行时的入栈、出栈操作,并由系统自动分配和自动释放内存可以及时得到回收,相对于堆来说,更加容易管理内存空间。

  • 堆:堆是一种树形数据结构,读取相对复杂。堆是动态分配内存,内存大小不一,也不会自动释放。栈中的数据长度不定,且占空间比较大。便于开辟内存空间,更加方便存储。

堆栈内存分配

程序运行时,每个线程分配一个栈,每个进程分配一个堆。也就是说,栈是线程独占的,堆是线程共用的。此外,栈创建的时候,大小是确定的,数据超过这个大小,就发生stack overflow错误,而堆的大小是不确定的,需要的话可以不断增加。

2. 栈和队列

(1)队列

队列是一种先进先出的数据结构。 队列在列表的末端增加项,在首端移除项。它允许在表的首端(队列头)进行删除操作,在表的末端(队列尾)进行插入操作;

(2)栈

  • 栈是一种后进先出的数据结构,也就是说最新添加的项最早被移出;它是一种运算受限的线性表,只能在栈顶进行插入和删除操作。向一个栈插入新元素叫入栈(进栈),就是把新元素放入到栈顶的上面,成为新的栈顶;从一个栈删除元素叫出栈,就是把栈顶的元素删除掉,相邻的成为新栈顶。

应用场景:

  • 栈可以用于字符匹配,数据反转等场景
  • 队列可以用于任务队列,共享打印机等场景
  • 堆可以用于优先队列,堆排序等场景

堆、栈、队列的区别以及使用场景相关推荐

  1. 面试题:堆、栈、队列的区别以及使用场景

    1. 堆和栈 JavaScript中的变量分为基本类型和引用类型: 基本类型是保存在栈内存中的简单数据段,它们的值都有固定的大小,每种类型的数据占用的内存空间的大小是确定的,并由系统自动分配和自动释放 ...

  2. “堆”,栈,堆栈,队列,它们的区别?

    2019独角兽企业重金招聘Python工程师标准>>> 什么是"堆","栈","堆栈","队列",它们 ...

  3. 栈和队列的区别,栈和堆的区别

    栈和队列的区别: 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 栈是先进后出,队列是先进先出. 栈只允许在表尾一端进行插入和删除,队列只允许在表尾一端进行插入,在表头一端进行删除 ...

  4. 堆、栈、队列的区别和联系

    数据结构中的堆.栈和队列 堆:堆是一种经过排序的树形数据结构,每个结点都有一个值.通常我们所说的堆的数据结构,是指二叉堆.堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆.由于堆的这个 ...

  5. 栈和队列的区别,栈和堆得区别

    栈和队列的区别: 1.栈是先进后出.队列是先进先出. 2.栈只允许在一端进行插入和删除,队列则在表的一段插入另一端删除. 3.在栈中遍历数据需要扫描全部数据,所以比较慢.而在队列中可以从两端进行所以速 ...

  6. 栈和队列的区别与栈和堆的区别

    1.栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 队列先进先出,栈先进后出. 栈只允许在表尾一端进行插入和删除,而队列只允许在表尾一端进行插入,在表头一端进行删 ...

  7. 什么是“堆”,栈,堆栈,队列,它们的区别

    如果你学过数据结构,就一定会遇到"堆","栈","堆栈","队列",而最关键的是这些到底是什么意思?最关键的是即使你去面 ...

  8. 栈和队列的基本操作(栈和队列的区别)

    数据结构中的栈与内存中的栈的不同 一.数据结构中的堆栈 在数据结构中的堆栈,实际上堆栈是两种数据结构:堆和栈.堆和栈都是一种数据项按序排列的数据结构. 1.栈就像装数据的桶或箱子 我们先从大家比较熟悉 ...

  9. 前端进击的巨人(二):栈、堆、队列、内存空间

    面试经常遇到的深浅拷贝,事件轮询,函数调用栈,闭包等容易出错的题目,究其原因,都是跟JavaScript基础知识不牢固有关,下层地基没打好,上层就是豆腐渣工程,新人小白,踏实踩土才是关键. 打地基第二 ...

最新文章

  1. 在线人员统计系统php,PHP统计当前在线人数 - 案例源码
  2. Unity C#单例模式的实现
  3. Spark 安装配置简单测试
  4. Working copy XXX locked and cleanup failed in SVN
  5. 45 jump game II(贪心)
  6. 605. 种花问题 golang 切片越界问题和逻辑操作符的思考
  7. java九年_Java 9明年9月釋出正式版
  8. 三重积分先二后一和先一后二的碎碎念
  9. [POJ2796]Feel Good
  10. docker镜像存储在哪里
  11. iptables案例:使用iptables搭建路由器
  12. 分享这几个在线语音转文字的方法,快快收藏好
  13. 豆果美食 php,#一道菜表白豆果美食# 比蛋糕还好吃的咕咕霍夫面包
  14. 魔物学院计算机,测试 | 你属于魔法学校什么学院的?
  15. 漫画:头条面试官谈自我介绍
  16. 转载:欧姆社 漫画学习统计学
  17. 北斗系统基础知识2(北斗一代定位原理详述)
  18. 免费高性能计算机平台,北京大学高性能计算平台
  19. 【Android应用开发详解】第01期:第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
  20. 停不下来!程序员在GitHub上开源了一个自制表情包项目

热门文章

  1. c语言字母意义,C语言 字符串前加L的意义 如:L“A”
  2. 二叉树的非递归遍历和层次遍历详解
  3. P7774 KUTEVI
  4. 基于ARDUINO汽车智能防碰撞控制系统设计(毕业设计)
  5. CVPR2020恶劣天气下的多模态融合Seeing Through Fog Without Seeing Fog
  6. 07年时写给刚入职的同事的一封信
  7. 御剑系列扫描工具(五款)下载
  8. 2021.5.9(cf)
  9. JavaScript高级程序设计(读书笔记)(一)
  10. 化学中的机器学习方法1