zoukankan      html  css  js  c++  java
  • 优先队列:斜堆

    1、概念:斜堆是左式堆的自调节形式,实现简单,是特殊的二叉树,其与左式堆的关系类似伸展树与AVL树之间的关系。

    2、结构:是二叉树的结构,与左式堆不同,没有Npl。

    3、操作:在合并时,将较大堆和较小堆的右子树合并,然后交换较小堆的左右子树。其余操作基本一致。

    4、代码实现:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    using namespace std;
    
    struct Node{
        int data;
        struct Node *Left,*Right;
    };
    typedef struct Node* Skew_Heap;
    
    bool IsEmpty(Skew_Heap H)
    {
        return H==NULL;
    }
    
    Skew_Heap Merge(Skew_Heap T1,Skew_Heap T2) //斜堆的合并 
    {
        Skew_Heap tmp;
        if(T1==NULL) return T2;
        if(T2==NULL) return T1;
        if(T1->data>T2->data){
            tmp=T1;T1=T2;T2=tmp;
        }
        
        tmp=Merge(T1->Right,T2);
        T1->Right=T1->Left;
        T1->Left=tmp;
        return T1;
    }
    
    Skew_Heap Insert(int x,Skew_Heap H) //斜堆的插入 
    {
        Skew_Heap tmp=new Node;
        if(tmp==NULL) printf("Out of Space");
        else{
            tmp->data=x;
            tmp->Left=tmp->Right=NULL;
            H=Merge(tmp,H);
        }
        return H;
    }
    
    Skew_Heap DeleteMin(Skew_Heap H) //斜堆的的删除最小元素 
    {
        if(IsEmpty(H)){
            printf("ERROR");
            return NULL;
        }
        Skew_Heap L=H->Left,R=H->Right;
        delete H;
        return Merge(L,R); 
    }
    
    void InOrder(Skew_Heap H) //斜堆的中序遍历
    {
        if(H){
            InOrder(H->Left);
            printf("%d ",H->data);
            InOrder(H->Right);
        }
    }
    
    int main(void)
    {
        Skew_Heap H=NULL;
        int n=7,i,x=-1;
        for(i=0;i<n;i++){
            x*=(-1);
            H=Insert(i*i+x,H);
        }
        InOrder(H);
        return 0;
    }
    View Code

     参考文章:传送门

  • 相关阅读:
    不使用BeanUtils,利用Java反射机制:表单数据自动封装到JavaBean
    VS2010水晶报表的添加与使用
    使用SelectClipRgn注意事项
    使用SelectClipRgn注意事项
    使用事件CreateEvent注意事项
    【转】Delphi内嵌ASM简易教程
    栈顶和栈底示意图
    【转】对ARM堆栈的理解
    UISegmentedControl的基本使用
    C语言小知识总结
  • 原文地址:https://www.cnblogs.com/2018zxy/p/10341005.html
Copyright © 2011-2022 走看看