首页 > 其他分享 >数据结构-堆

数据结构-堆

时间:2022-12-01 22:56:54浏览次数:36  
标签:数据结构 return int MaxHeap ElementType Data Size

typedef enum{false, true} bool;
typedef int ElementType;

typedef struct HNode *Heap;
struct HNode {
    ElementType *Data;
    int Size;
    int Capacity;
};
typedef Heap MaxHeap;
typedef Heap MinHeap;

#define MAXDATA 1000

MaxHeap CreateHeap(int MaxSize) {
    MaxHeap H   = (MaxHeap)malloc(sizeof(struct HNode));
    H->Data     = (ElementType*)malloc(sizeof(ElementType)*(MaxSize+1));
    H->Size     = 0;
    H->Capacity = MaxSize;
    H->Data[0]  = MAXDATA;
    // ReadInput(H);
    return H;
}

bool IsFull(MaxHeap H) {
    return H->Size == H->Capacity;
}

bool IsEmpty(MaxHeap H) {
    return !H->Capacity;
}

bool Insert(MaxHeap H, ElementType X) {
    if (IsFull(H)) {
        puts("Full!");
        return false;
    }
    int i = ++ H->Size;
    for (; X > H->Data[i/2]; i /= 2)
        H->Data[i] = H->Data[i/2];
    H->Data[i] = X;
    return true;
}

ElementType DeleteMax(MaxHeap H) {
    if (IsEmpty(H)) {
        puts("Empty Heap!");
        return false;
    }
    ElementType MaxItem = H->Data[1];
    ElementType X = H->Data[H->Size --];
    int i, j;
    for (i = 1; i*2 <= H->Size; i = j) {
        j = i*2;
        if (j != H->Size && H->Data[j] < H->Data[j+1])
            ++ j;
        if (X >= H->Data[j]) break;
        else
            H->Data[i] = H->Data[j];
    }
    H->Data[i] = X;
    return MaxItem;
}

void PrecDown(MaxHeap H, int p) {
    ElementType X = H->Data[p];
    int i, j;
    for (i = p; i*2 <= H->Size; i = j) {
        j = i*2;
        if (j != H->Size && H->Data[j] < H->Data[j+1])
            ++ j;
        if (X >= H->Data[j]) break;
        else
            H->Data[i] = H->Data[j];
    }
    H->Data[i] = X;
}

void BulidHeap(MaxHeap H) {
    int i;
    for (i = H->Size/2; i > 0; -- i)
        PrecDown(H, i);
}

标签:数据结构,return,int,MaxHeap,ElementType,Data,Size
From: https://www.cnblogs.com/shenpengfii/p/16943055.html

相关文章

  • Python学习(五):基本的数据结构——元组及常用方法
    1.元组的概述:元组与列表类似,由任意类型的元素组成序列;元组是不可变的(与列表不同处);2.元组的创建及检验:>>>tuple_1=(1,2,3,4)>>>tuple_1(1,2,3,4)>>>tuple_2......
  • 【以练促学:数据结构】2.线性表
    (持续刷题,持续更新...)1.顺序表与链表的比较:(空间性能)顺序表链表 逻辑相邻,物理存储位置相邻逻辑相邻,物理存储位置未必相邻存储空间分配·必须预先分配不用......
  • Python学习(三):基本的数据结构——列表及常用方法
    1.列表的创建:list或者使用[];a='dawt'list(a)['d','a','w','t']a=['d','a','w','t']a['d','a','w','t']注意:使用list可以将其他类......
  • PYTHON 数据结构 - 集合
    1.1集合是一种可迭代的,无序的,不能包含重复元素的数据结构。集合的元素是不可变的,如:int,float,string,tuple等,可变的内容不可以是集合的元素,如:list,dict,set等。集......
  • 数据结构(6):串(上)
    字符串简称串,计算机上非数值处理的对象基本都是字符串数据。我们常见的信息检索系统(如搜索引擎)、文本编辑程序(如Word)、问答系统、自然语言翻译系统等,都是以字符串数据作为......
  • 数据结构(4):队列(上)
    上回说到,栈常见的三个应用:括号匹配、表达式求值以及递归。这一会我们来看一看另一个操作受限的线性表:队列!队列的基本概念队列的定义队列(Queue)简称队,也是一种操作受限的线性......
  • 数据结构(3):栈(上)
    上一回,我讲了一下链表的应用:一元多项式,这一回,我们来看到一个全新的数据结构:栈!栈的基本概念栈的定义栈(Stack)是一种只允许在一端进行插入或删除操作的线性表。首先栈是一种线......
  • 数据结构入门级-串
    1、串的概念字符串简称串,是一种特殊的线性表,它的数据元素仅由一个字符组成。2、串的定义串(String)是由零个或多个字符组成的有限序列,又称字符串。   其中s是串......
  • 【数据结构】笛卡尔树
    把一个数组的元素,从左到右插入笛卡尔树,可以用栈O(n)地构建出来。笛卡尔树上的节点满足堆的性质(小根堆就是一个节点小于其两个子节点的权值)。所以用这个方式扫描出的笛卡尔......
  • 常用代码模板2——数据结构
    常用代码模板2——数据结构单链表//head存储链表头节点的下标,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前可以用的最新的点的下标inthead,e[N],ne[N],idx;......