数据结构—堆 大根堆 小根堆 STL实现

本文介绍了堆这一数据结构,特别是大根堆和小根堆的性质。文章详细阐述了堆的建立和删除根元素的过程,并探讨了如何在C++中使用STL实现大根堆和小根堆,尤其是借助优先队列来构建堆。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

将堆看做一种完全二叉树。可以用数组的方式存储。

在这里插入图片描述

性质

在这里插入图片描述

大根堆:对于所有结点而言,除根结点以外,所有结点的值都不超过其父结点的值;(即堆中的最大元素存放在根节点中,每一结点子树中的结点值都小于等于该结点的值;) 小根堆反之;

根的建立过程

建立过程

各个结点的插入过程

在这里插入图片描述

根元素的删除过程

在这里插入图片描述

仅仅是实现过程不一样,其他没什么差别

在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN = 100;
int heap[MAXN], siz;//siz为当前堆的大小
//在堆的末尾先加入一个数,比较这个数同他父亲的大小关系(假设其为小根堆),如果这个数小于父亲,就交换该数与其父亲,不断递归直到根节点
void insert(int x) {
   
   
	heap[++siz] = x;//从1开始编号
	int pos = siz;
	while (pos != 1) {
   
   //不断向上递归
		if (heap[pos] >= heap[pos / 2])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值