概念
堆
是一种树形数据结构,读取相对复杂。堆是动态分配内存,内存大小不一,也不会自动释放。
栈
是一种线性的数据结构,读取规则是先进后出。栈中的数据占用的内存空间的大小是确定的,便于代码执行时的入栈、出栈操作,并由系统自动分配和自动释放内存可以及时得到回收,相对于堆来说,更加容易管理内存空间。
应用场景
堆
:
- 堆排序
- 优先队列
- 求解Top-k问题
- 求解百分位数
- 求解百分位数
栈
:
- 函数调用
- 括号匹配
- 表达式转换与求值
- 浏览器的前进和后退功能
- 二叉树的遍历
- 图形的深度优先(depth-first)搜索法
- 逆序输出