当前课程知识点:数据结构(下) > 第十章 优先级队列 > (b2)完全二叉堆:插入与上滤 > 10b2-2: 实例
我们来看一个简单的实例。
不难验证,这是一个由五个词条所构成的完全二叉堆。
上面的这棵完全二叉树是它的逻辑结构,
而下面则是其在物理上对应的向量结构。
可以看到,在物理上向量的首元素也就是逻辑上完全二叉树的根节点。
根据我们的约定,它正是整个数据集中的最大者。
接下来,假设我们需要插入一个数值为5的词条,
按照刚才所涉及的算法,我们首先将它作为末元素加入到向量之中,
在逻辑上这完全等效于在完全二叉树底层向右拓展了一个节点。
可以看到,这种拓展的确没有破坏完全二叉堆的结构性,
然而正如这个例子中的情况,新引入的这个词条有可能和它的父亲违背堆序性,
因为5大于0。
于是按照我们刚才所拟定的策略,令二者互换位置。
注意,这一对换物理上实际是在向量之中进行。
经过交换之后的结果是这样,
可以看到局部的堆序性的确得到了恢复,同时也不致影响到其它的各个节点。
然而新插入的这个节点上升一层后有可能会有一个新的父亲,比如这里的4。
而且很不幸,因为5依然大于4,所以我们说在这个局部同样违反了堆序性。
好在不要紧,因为我们可以继续沿用之前拟定的策略,令违反堆序性的两个节点互换位置,
同样在物理上这一对换实际也是在向量之中进行的。
经过这次交换之后,的确4和5互换了位置,
新插入的节点5继续上升一层,这一局部的堆序性得到了恢复,
而且同样也不致影响到其它的节点。
而新插入的这个节点5在上升一层后已经悄然成为了这个堆的堆顶。
它根本就没有父亲,因此堆序性在这一局部也就自然成立,
更重要的是至此堆序性在整个完全二叉堆中处处得到满足。
我们也就顺利地完成了这次插入操作。
可以看到,整个插入算法的实质过程无非是令新引入的这个节点不断与它的父亲交换位置。
每交换一次,新引入的这个节点都会上升一层。
那么这样一个过程如何兑现为具体的代码呢?
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试