1. 堆和栈

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

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

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

所以对于堆和栈;

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

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

堆栈内存分配

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

2. 栈和队列

(1)队列

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

(2)栈

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

应用场景:

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

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

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

    转载自:https://www.pianshen.com/article/54131761085/ 1. 堆和栈 JavaScript中的变量分为基本类型和引用类型: 基本类型是保存在栈内存中的简单数 ...

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

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

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

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

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

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

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

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

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

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

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

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

  8. 面试题-堆和栈的区别

    堆和栈的区别 在计算机领域,堆栈是一个不容忽视的概念,我们编写的C语言程序基本上都要用到.但对于很多的初学着来说,堆栈是一个很模糊的概念.堆栈: 一种数据结构. 一个在程序运行时用于存放的地方. 数据 ...

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

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

最新文章

  1. JAVA写XML乱码问题_java 写 xml 中文乱码
  2. 如何用xmanager远程连接centos6.0的桌面
  3. 求一棵二叉树根到所有叶子节点的路径
  4. ORA-07445导致实例崩溃的解决【The solution of instance crush by ORA-07445】
  5. 两数之和C++代码实现超详细讲解
  6. Alpha冲刺博客集
  7. 华为鸿蒙发布会新手机,曝华为 P50/Pro 系列最终版确定,6 月 2 日揭晓鸿蒙手机发布时间...
  8. 51nod 1623 完美消除(数位DP)
  9. 使用keepalived实现双机热备
  10. 【渝粤教育】国家开放大学2018年春季 0043-22T计算机文化 参考试题
  11. 《RabbitMQ 实战指南》第五章 RabbitMQ 进阶(下)
  12. H5炫酷特效系列1——canvas满屏幕变换爱心示例
  13. 微信小程序_(校园视)开发视频的展示页_上
  14. 信息系统项目的应急预案方案_从环评到验收、排污许可证、应急预案,都应在项目什么阶段开展? 先后顺序是什么?...
  15. 单词字符的one-hot编码
  16. 此变量非彼变量(python变量)
  17. 苹果Mac重复文件清理工具:​​​​Tidy Up
  18. Java vs ECS,垃圾回收的乾坤大挪移?
  19. 51单片机波特率计算c语言,51单片机波特率怎么算?51单片机波特率计算公式
  20. 英语情景对话计算机专业,工作有关情景对话英语

热门文章

  1. 算法设计与分析复习--回溯法
  2. references column 'xxx' which is not in SELECT list
  3. java jtable 复选框_java swing如何在JTable一个单元格添加多个复选框
  4. dns服务器未响应重启就好,网络诊断提示DNS服务器未响应解决方法 - 全文
  5. SAP ABAP——SAP简介(二)【SAP主要产品时间线】
  6. 前景好过富士康?苹果订单助台积电股价创新高
  7. 如何做擦能防止网站被劫持
  8. python网页自动填写_Windows下使用python3 + selenium实现网页自动填表功能
  9. 用程序编写计算公式的高次方程数字计算机
  10. 洛谷P1603,P1597