一、栈
a)栈的定义
栈是一种线性结构,采用先进后出(Last In First Out)的原则,可以理解为‘’客栈‘’,只有一个正门,方便记忆。
在栈中进行插入和删除操作的一端被称为栈顶(Top),另一端成为栈底(Bottom)。
栈的顺序存储是指用一组连续的存储单元依次存储自栈顶到栈底的数据元素,栈需要预先申请栈的存储空间,也就是说栈空间的容量是有限的。
b)栈的特点
基本类型的变量和引用类型的变量都是在栈内存中分配的。
数据一执行完毕,就会释放资源。
栈内存中的变量没有初始化默认值,需要手动设置。
二、队列
a)队列的定义
队列是先进先出(First In Last Out)的线性表,可以理解为一个队伍穿过隧道。
队列在表的一端插入元素,在表的另一端删除元素,允许插入元素的一端成为队尾(Rear),允许删除元素的一端成为队头(Front)。
顺序队列的存储空间容量是提前设定的。
三、堆
a)堆的定义
堆是特殊的“队列”,堆是按照元素的优先级存储的,而不是按照元素进入的先后顺序。
堆是一颗完全二叉树,其结点值大于或小于子结点值(大于是最大堆,小于是最小堆)。
b)堆的特点
堆中存储new创建的对象和数组。
堆内存中的实体是用来封装数据的,都有默认初始化值。
堆内存中的实体没有被指向时,JVM启动垃圾回收机制,自动清除。
四、栈、堆、队列的区别
a)内存分配
栈用来存储局部变量、函数参数,由操作系统自动分配
堆用来存储new创建的对象、数组,需要向操作系统申请内存空间
b)数据结构
栈是线性表
堆是完全二叉树