1.堆【heap】
(1)堆总是一颗完全二叉树【深度为K,除了k层外,1~k-1层的结点数都达到最大值,k层所有的节点都连续集中在最左边的就是完全二叉树】
(2)堆 不是在程序编译时申请内存的,而是在程序运行时向操作系统申请内存空间,即动态分配内存空间,一般是申请/给予的过程;
(3)堆通常可被看作一棵树的数组对象,如堆排序;
(4)用来存放由 new 创建的对象和数组,由程序员分配和释放,如果程序员不释放,最终会被系统回收;
(5)存放在二级缓存,生命周期由垃圾回收算法决定,不是一旦成为孤儿对象就立刻被回收的。
2.栈【stack】
(1)栈,又名栈堆,是线性表;
(2)仅能在链表的一端做插入/删除运算,一端为栈顶,另一端就是栈底了;
(3)数据是先进后出的数据结构 ,就像一个水杯【或水桶】,先进来的在底部,最后才能出去;
(4)由操作系统自动分配和释放,用于存放函数的参数值 和局部变量的值;
(5)存放在一级缓存,调用完毕立即释放。
3.队列【queue】
(1)队列是种特殊的线性表,与栈有很大的区别,因为队列只能在队头做删除操作,只能在队尾做插入操作,即先进先出;
(2)建立顺序队列结构时,必须为其静态分配或动态申请一片连续的存储空间,并设立两个指针进行管理,一个是队头指针front,指向前一个元素的存储位置,一个是队尾指针rear,指向后一个元素的存储位置;
(3)队列没有元素是,称为空队列。