斜堆--C语言实现

来源:互联网 发布:linux mysql详解 编辑:程序博客网 时间:2024/05/21 17:42

skewheap.h

#ifndef _SKEWHEAP_H_#define _SKEWHEAP_H_#define Insert(X,H) (H=Insert((X),H))struct TreeNode;typedef struct TreeNode *PriorityQueue;typedef int ElementType;PriorityQueue Initialize();ElementType FindMin(PriorityQueue H);int IsEmpty(PriorityQueue H);PriorityQueue Merge(PriorityQueue H1, PriorityQueue H2);PriorityQueue Insert1(ElementType X, PriorityQueue H);PriorityQueue DeleteMin(PriorityQueue H);#endif

skewheap.c

#include<stdio.h>#include<stdlib.h>#include"skewheap.h"struct TreeNode{    ElementType Element;    PriorityQueue Left;    PriorityQueue Right;};PriorityQueue Initialize(){    PriorityQueue H;    H = (PriorityQueue)malloc(sizeof(TreeNode));    if (H == NULL)    {        printf("FAILURE!\n");        exit(EXIT_FAILURE);    }    H->Left = H->Right = NULL;    H->Element = 0;    return H;}ElementType FindMin(PriorityQueue H){    if (!H)        return H->Element;    return 0;}int IsEmpty(PriorityQueue H){    return H->Left == NULL && H->Right == NULL;}void SwapChildren(PriorityQueue H){    PriorityQueue Temp;    Temp = H->Left;    H->Left = H->Right;    H->Right = Temp;}static PriorityQueue Merge1(PriorityQueue H1, PriorityQueue H2){    if (H1->Left == NULL)        H1->Left = H2;    else    {        H1->Right = Merge(H1->Right, H2);        SwapChildren(H1);    }    return H1;}PriorityQueue Merge(PriorityQueue H1, PriorityQueue H2){    if (H1 == NULL)        return H2;    if (H2 == NULL)        return H1;    if (H1->Element < H2->Element)        return Merge1(H1, H2);    else        return Merge1(H2, H1);}PriorityQueue Insert1(ElementType X, PriorityQueue H){    PriorityQueue SingleNode;    SingleNode = Initialize();    SingleNode->Element = X;    H=Merge(SingleNode, H);    return H;}PriorityQueue DeleteMin(PriorityQueue H){    PriorityQueue LeftHeap, RightHeap;    if (IsEmpty(H))    {        printf("ERROR!\n");        exit(EXIT_FAILURE);    }    LeftHeap = H->Left;    RightHeap = H->Right;    free(H);    return Merge(LeftHeap, RightHeap);}
0 0
原创粉丝点击