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

转载:http://blog.sina.com.cn/s/blog_ac9fdc0b0101l1md.html


优先队列:BinomialQueue二项队列

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

杂谈

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

你可能感兴趣的:(Data,Structures,and,Algorithms)