(笔记整理未完成)【数据结构:堆与优先队列】

这篇博客详细介绍了堆的基本概念,包括堆的定义、添加元素、删除元素的操作,以及如何使用STL实现堆。并通过洛谷P3378题目探讨了堆的应用,提供了AC代码和相关练习。
摘要由CSDN通过智能技术生成

笔记


一 . 堆的定义

1.堆是一个完全二叉树

2.完全二叉树的根节点与左右节点存在关系

根节点在数组中为第 i 个,它的左节点为第 2*i 个,右节点为第 2*i+1 个。

二 . 堆的添加

向堆中添加元素的思路如下:
1.在堆尾加入这个元素,并把它标志为当前节点
2.比较当前节点a(下标 i )和它父节点b(下标i/2)的大小
如果a<b,则swap(a,b),并把a标志为当前节点,继续;
如果a>=b,则退出。
 

三 . 堆的删除

从堆中取出并删除这个元素的思路如下:(小根堆)
1.取出堆的根节点的值
2.把堆的最后一个节点放到根上,覆盖掉根,节点数减1。
3.调整以满足堆(这里是小根堆)的性质。

四 . STL实现堆 


模板题: 洛谷 P3378 【模板】堆 (小根堆)

题目描述

给定一个数列,初始为空,请支持下面三种操作:

  1. 给定一个整数 x,请将 x 加入到数列中。
  2. 输出数列中最小的数。
  3. 删除数列中最小的数(如果有多个数最小,只删除 1 个)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值