转载:优先队列:BinomialQueue 二项队列

来源:互联网 发布:网络应用层协议 编辑:程序博客网 时间:2024/06/01 08:04
转载:http://blog.sina.com.cn/s/blog_ac9fdc0b0101l1md.html


优先队列:BinomialQueue二项队列

 (2013-04-04 22:12:31)
转载
标签: 

杂谈

分类: 数据结构
    二项队列同样支持合并,插入,删除,每次操作的最坏情形运行时间为O(logN),而插入操作平均花费常数时间。
    二项队列是堆序的集合,称为森林。堆序树中的每一颗都是有约束的形式,叫作二项树。
优先队列:BinomialQueue二项队列
**********************************************************************************************
树的标准表示方法:每个结点的儿子都在一个链表中,而且每个结点都有一个指向它的第一个儿子和右兄弟。
底层如下所示:
优先队列:BinomialQueue二项队列 
下面是整个类型的架构:
优先队列:BinomialQueue二项队列 
********************************************************************************************
先是构造函数,设置了多种构造函数,其中单参数的是位于push中调用merge
优先队列:BinomialQueue二项队列 
然后是拷贝构造函数和=的重载,调用底层的copy,和查找二叉树操作很像:
优先队列:BinomialQueue二项队列 
再就是merge,非常nice的一段代码:
优先队列:BinomialQueue二项队列
优先队列:BinomialQueue二项队列
优先队列:BinomialQueue二项队列
这两个函数辅助merge的完成:
优先队列:BinomialQueue二项队列 
这里面参数的传递,和最后将Node设置为NULL,都是很要技巧的~~~值得多体会啊
然后是一连续的公共函数,基于merge
优先队列:BinomialQueue二项队列 
删除函数还是比较的困难,需要考虑一堆边界条件,最后在调试中不断的完善:
优先队列:BinomialQueue二项队列 
然后是清空函数,和查找树一样的方法,实在没啥好说地:
优先队列:BinomialQueue二项队列 
*********************************************************************************************
测试代码:
优先队列:BinomialQueue二项队列 
结果很nice:
优先队列:BinomialQueue二项队列 
**********************************************************************************************