赞
踩
0.1) 本文总结于 数据结构与算法分析,但源代码均为原创;旨在理清二叉堆(优先队列) + 堆的其他操作及其应用, 以便让朋友些知道为什么要学习优先队列;
1.0)优先队列定义:优先队列是允许至少下列两种操作的数据结构,insert(插入), 它的工作时显而易见的,以及 deleteMin(删除最小者), 它的工作是找出、返回和删除优先队列中最小的元素;
1.1)我们把二叉堆中只叫做堆, 堆也有两个性质:结构性和堆序性;对堆的 insert and deleteMin 操作必须要到堆的所有性质都被满足时才能终止;
1.2)结构性质
1.3) 堆序性质
2.1)insert 插入:为将一个元素X 插入到堆中, 在下一个空闲位置创建一个空穴, 否则该堆将不是完全树;如果X 可以放在该空穴中而并不破坏堆的序, 那么插入完成, 否则, 我们把空穴的父节点上的元素移入该空穴中;(这种一般策略叫做 上滤, 新元素在堆中上滤直到找出正确的位置);
2.2)deleteMin(删除最小元):找出最小元容易,困难是删除它;当删除一个最小元时, 在根节点处产生了一个空穴, 由于现在堆少了一个元素,因此对中最后一个元素 X 必须移动到堆的某个地方;如果X 可以被放到空穴中,那么 deleteMin 完成;显然这一般不可能, 因此我们将空穴中的较小者移入空穴, 这样就把空穴向下推了一层;重复该步骤直到 X 可以被放入空穴中;因此,我们的做法是将 X 置入沿着从根开始包含最小儿子的 一条路径上的一个正确的位置;(这种策略叫做下滤);
2.3)出现的问题+解决方法
3.1)download source code :
https://github.com/pacosonTang/dataStructure-algorithmAnalysis/tree/master/chapter6
3.2)代码详情+打印效果参见
http://blog.csdn.net/PacosonSWJTU/article/details/49498255
的“【2】source code+printing”部分,因为二叉堆(优先队列)的基本操作 和 其他高级的应用操作的实现代码我都放到一起的;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。