一、堆是什么?
1、堆通常是一个可以被看作一棵树的数组对象,堆总满足下列性质:
- 堆中某个节点的总是不大于或不小于其父节点的值;
- 堆总是一棵二叉树
- 将根节点最大的堆叫做最大堆或大根堆,节点最小的堆叫最小堆或小根堆,常见的堆有二叉堆、斐波那契堆等
2、堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间。即动态分配内存,对其访问和对一般内存的访问没有区别;
3、堆是应用程序在运行的时候请求操作系统分配给自己内存,一般是申请/给与的过程;
4、堆是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出);
二、栈是什么?
1、栈(Stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。
2、栈就是一个桶,后放进去的先拿出来,它下面本来有的东西等它出来之后才能出来(先进后出)
3、栈(Stack)是操作系统建立某个进程时或者线程(在支持多线程的操作