




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
5 6堆和优先权队列 优先权队列中的元素 按其优先级的高低而不是按元素进入队列的次序 来确定出队列的次序 堆是一种很有用的数据结构 它可以用于高效地实现优先权队列 课堂提要第5章树5 1树的基本概念5 2二叉树5 3二叉树的遍历5 5树和森林5 6堆和优先权队列5 7哈夫曼树和哈夫曼编码 5 6 1堆 1 堆的定义 1 一个大小为n的堆 heap 是一棵包含n个结点的完全二叉树 该树中每个结点的关键字值大于等于双亲结点的关键字值 这样定义的堆称为最小堆 MinHeap 例如 右图的完全二叉树是最小堆 2 堆又可以定义为 堆是n个元素的序列 k0 k1 kn 1 当且仅当满足ki k2i 1且ki k2i 2 i 0 1 2 n 2 2 时称为堆 最小堆 例如 序列 23 53 34 65 83 74 是最小堆 2 堆的顺序存储表示堆的顺序表示是完全二叉树的顺序表示 3 向下调整和建堆运算 1 函数voidAdjustDown Tkeap intr intj 设序列以顺序方式保存在一维数组heap 中 数组元素具有可比较大小的类型 假定从数组中r 1到j 这j r个位置上的元素已满足ki k2i 1且ki k2i 2 i 0 1 2 n 2 2 条件 现向下调整第r位置上的元素 如果kr大于k2r 1和k2r 2 中的较小的元素 则将kr与该较小元素交换 继续这样的过程 直到不再需要调整 或到达堆底为止 templatevoidAdjustDown Theap intr intj intchild Ttemp heap r child 2 r 1 child是r的左孩子while childheap child 1 child if temp heap child break heap child 1 2 heap child child 2 child 1 heap child 1 2 temp 2 建堆运算它通过从第 n 2 位置开始 直到第一个元素 重复调用AdjustDown函数实现之 templatevoidMinHeap Theap intn for inti n 2 2 i 1 i AdjustDown heap i n 1 例 74 71 例 初始序列 5 6 2优先权队列 1 优先权队列优先权队列不同于先进先出 FIFO 队列 优先权队列中的元素 按其优先级的高低而不是按元素进入队列的次序 来确定出队列的次序 最小值为最高优先权 从优先权队列中删除最高优先权元素来实现优先操作 2 优先权队列的C 类Insert 将一个新元素插入优先权队列 Delete 从队列中取出具有最高优先级的元素 并从队列中删除之 3 优先权队列ADTADTPrioQueue 数据 n 0个元素的最小堆 运算 Create 建立一个空队列 Destroy 撤销一个队列 IsEmpty 若队列空 返回true 否则返回false IsFull 若队列满 返回true 否则返回false Append x 元素值为x的新元素插入队列 Serve x 在x中返回具有最高优先权的元素值 并从优先队列中删除该元素 程序5 12优先权队列的C 类templateclassPriorityQueue public PriorityQueue intmSize 20 PriorityQueue delete q voidAppend constT 优先权队列的构造函数和析构函数templatePriorityQueue PriorityQueue intmQSize maxSize mSize n 0 q newT maxSize PriorityQueue delete q 4 实现优先权队列AdjustDown和AdjustUp函数templatevoidAdjustDown Theap intr intj intchild Ttemp heap r child 2 r 1 child是r的左孩子while childheap child 1 child if temp heap child break heap child 1 2 heap child child 2 child 1 heap child 1 2 temp AdjustUp函数AdjustUp intj 设数组中0到j 1 这j个位置上的元素已满足ki k2i 1且ki k2i 2 i 0 1 2 n 2 2 条件 运行AdjustUp intj 将使得增加一个元素q j 这0 j个元素也满足堆的特性 AdjustUp函数templatevoidPriorityQueue AdjustUp intj inti j Ttemp q i while i 0 5 Append和Serve函数templatevoidPriorityQueue Append constT templatevoidPriorityQueue Serve T 设从空队列开始 依此向队列中插入元素 71 74 2 72 54 93 52 28 则每次插入后队列的状态如下表 从队列中删除最高优先权的元素2以后 队列中剩余元素排列如下 28 54 52 74 72 93 71 6 Append和Serve函数的时间容易分析优先权队列的插入和删除运算的时间复杂度 由于具有n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心理物理学题目及答案
- 心理健康论述题目及答案
- 校长面试题目大全及答案
- 观后感奇幻森林1000字8篇
- 时间取样课件
- 有魔力的眼睛800字11篇
- 写人作文有妹妹真好550字9篇范文
- 散文樱花长廊900字7篇
- 商务会议活动策划与执行服务合同协议
- 品牌授权使用及营销推广合同
- 胸腰椎围手术期护理
- 安全管理竞聘报告
- 杜富国课件教学课件
- 石油化工设备维护保养指南
- 浪潮在线测评题答案大全
- 2.3.1 匀变速直线运动的位移与时间的关系 课件高一上学期物理人教版(2019)必修第一册
- 统编版二年级上册语文《 妈妈睡了》 课件完整版
- 人教版小学一年级上册写字教案
- 2025高中物理《课时作业》人教版必修第二册单元素养评价(一)
- 头脑特工队-Inside-Out中英文字幕对照
- XX村集体经济发展章程
评论
0/150
提交评论