数据结构-堆
1: 堆的概念以及特性
堆是一种数组对象,它可以被视为一科完全二叉树结构。它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。
2:数据结构堆与内存堆区的区别
1):数据结构中的栈与堆
数据结构中的堆与栈是两种不同的数据结构,两者都是数据项按序排列的数据结构。
栈:像是装数据的桶或者箱子
栈是一种具有先进后出特性的数据结构,也就是说,先存放的后取,后存放的先取,这就类似于我们取箱子底部的东西(放进去比较早的),必须先移开压在它上面的东西(后放进去的)
堆:像是一颗倒立的大树
堆是一种经过排序的树形数据结构,每个节点都是一个值,通常我们说的堆的数据结构是指二叉树。
堆的特点是根结点的值最大(或最小),且根结点的两个数也是一个堆。
由于堆的这个特性,常用来实现优先队列,堆的存取是随意的。
2):内存分配中的堆和栈
我们现在用的堆和栈并不是数据结构中的堆和栈,之所以说了数据结构中的堆和栈是为了和后面的堆区和栈区区别开来。
内存中的栈区处于相对较高的地址,以地址的增长方向为上的话,栈地址是向下增长的
栈中分配局部变量空间,堆区是向上增长的用于分配程序员申请的内存空间;
另外还有静态区和分配静态变量,全局变量的;
只读区是分配常量和程序代码空间的;
3:堆的基本操作
一:调整
(1):向下调整:
void swap(int* a, int* b) {
int t = *a;
*a = *b;
*b = t;
}
void heapDown(int a[], int size, int index) {
int left = 2 * index + 1;
int right = 2