码迷,mamicode.com
首页 > 其他好文 > 详细

二项队列

时间:2017-07-30 12:45:44      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:return   net   int   case   combine   目标   bin   ret   分代   

堆序树的集合,森林

二项树 Bk 由一个带有儿子 B1 B2 ... Bk-1 的根组成 ,高度为 k 的二项树恰好有 2^k 个节点

目标:用二项树的集合惟一表示任意大小的优先队列

树的合并只在乎有没有保持堆序性,兄弟节点间没有要求

合并 2 个优先队列部分代码

T1=H1->TheTrees[i];
T2=H2->TheTrees[i];
switch (!!T1 + 2*!!T2 + 4*!!Carry) {
    case 0:
    case 1:
        break;
    case 2:
        H1->TheTrees[i] = T2;
        H2->TheTrees[i] = NULL;
        break;
    case 4:
        H1->TheTrees[i] = Carry;
        Carry = NULL;
        break;
    case 3:
        carry = CombineTrees(T1, T2);
        H1->TheTrees[i] = H2->TheTrees[i] = NULL;
        break;
    case 5:
        Carry = CombineTrees(T1, Carry);
        H1->TheTrees[i] = NULL;
        break;
    case 6:
        Carry = CombineTrees(T2, Carry);
        H2->TheTrees[i] = NULL;
        break;
    case 7:
        H1->TheTrees[i] = Carry;
        Carry = CombineTrees(T1, T2);
        H2->TheTrees[i] = NULL;
        break;
}

 CombineTrees代码如下

BinTree CombineTrees(BinTree T1, BinTree T2) {
    if (T1->Element > T2->Element) {
        return CombineTrees(T2, T1);
    }
    T2->NextSibling = T1->LeftChild;
    T1->LeftChild = T2;
    return T1;
}

 

二项队列

标签:return   net   int   case   combine   目标   bin   ret   分代   

原文地址:http://www.cnblogs.com/m2492565210/p/7258483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!