数据结构-堆

本文介绍了数据结构中的堆,它是一种完全二叉树,分为大顶堆和小顶堆,常用于堆排序和优先队列。堆与内存中的栈有本质区别,堆常用来实现优先队列。堆的基本操作包括调整、创建、插入和删除。
摘要由CSDN通过智能技术生成

数据结构-堆

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值