(透彻理解)最精锐代码::堆的三种基本操作新建-插入-删除

1.删除堆顶的最大元素 (以某个元素为根结点向下调整为堆)

比如:删除这个堆的20

第一步:是20 和 3 交换

第二步:以3为根节点开始调整为堆(3和17交换)

再以3为根节点调整为堆(16和3交换)这样又形成了一个堆

2.往一个完整的堆中插入元素(唯一一个自底向上调整的例子)

目标:往堆的尾部插入元素21,这样就破坏了堆,然后要调整为堆

算法1:21和8调整   这样20的左右是一个堆了

算法2:将21和20进行调整,这样堆就形成了

3.新建一个堆(以某个元素为根结点向下调整为堆

算法1:以3为根结点开始调整为堆,8和3交换 ,这样这个小堆就建立好了

算法2:以7为根结点向下调整为堆

算法3:然后以16为根结点向下调整为堆

时间: 2024-08-03 15:39:34

(透彻理解)最精锐代码::堆的三种基本操作新建-插入-删除的相关文章

三种方式来插入样式表

如何使用样式 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化.有以下三种方式来插入样式表: 外部样式表 当样式需要被应用到很多页面的时候,外部样式表将是理想的选择.使用外部样式表,你就可以通过更改一个文件来改变整个站点的外观. <head> <link rel="stylesheet" type="text/css" href="mystyle.css"> </head> 内部样式表 当单个文件

纯代码Autolayout的三种方法

Autolayout讲解较多的就是xib和storyboard用法,本文主要记录纯代码的Autolayout使用方法: 方法1.苹果原生的方法,这种方法虽然简单但是太过繁杂,可用性很差 //宽度=superView高度 [superView addConstraint:[NSLayoutConstraint constraintWithItem:view1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toIte

三种迭代是否可以删除

普通for循环,可以删除,但是索引要-- 迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常 增强for循环不能删除

三种样式表插入方法

外部样式表: <link rel="stylesheet " type="text/css" href="Mystyle.css"> 内部样式表: <style type="text/css"> P{ color:green; } </style> 内联样式表: <p> style="color:red"></p>

链表插入三种情况和链表删除

欢迎大家阅读参考,如有错误或疑问请留言纠正,谢谢

170728、单例模式的三种水平代码

一.单例模型具备条件: 1.私有的构造方法 2.instance(单一实例,static)和getInstance(获取实例的方法,static)必须是static 二.下面三种不同层次单例模型代码评价: 第一种,通过测试发现,虚拟机加载类的时候单例就会被初始化,有些比较费时的类,我们需要使用时才加载(比如:数据库连接,开机加速等),这时候就不太适合用这种方式 第二种,通过测试发现虚拟机加载类的时候不会初始化,只有调用了获取实例的方法时才会实例化,如果已经实例化的直接拿来用,实现了懒加载,但采用

【转】WebView的JavaScript与本地代码三种交互方式

WebView的漏洞分析 漏洞产生的原因 最近在开发过程中遇到一个问题,就是 WebView 使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视,关于这个漏洞,这里就不多做解释了,可能有的同学早就了解了,本来想写一篇文章详细介绍一下,但是网上的知识太多了,而且都很详细,就没弄了,这里大致简单明了的说几句: 漏洞产生的原因 这个漏洞导致的原因主要是因为Android中 WebView 中的 JS访问本地方法 的方式存在缺陷,我们做过交互的都

Qt中三种解析xml的方式

在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面三种解析xml采用相同的原理,所以就算你不是学习qt,也可以大致参看一下代码,对三种解析方式有一种大致的感觉. 先给出xml如下: <?xml version="1.0" encoding="utf-8"?> <school> <teach

堆栈的三种实现方式

传统的堆栈操作只有 入栈push 和 出栈pop 两种,没有单独的访问栈顶元素的操作,访问栈顶元素的唯一方式就是出栈(pop会把堆栈顶部的值移出堆栈并返回这个值).这样的pop存在副作用. 所以,我们在这里实现提供push.pop.top三种基本操作的堆栈. 实现堆栈这一抽象数据类型(ADT),即要实现:入栈(push).出栈(pop).访问栈顶元素(top)的操作,另外加上两个判断 栈满.栈空与否的函数. 通常,我们可以使用 静态数组.动态数组.动态链表 这三种方式来实现堆栈. 首先,在sta