6月10日数据结构——堆

Posted lvzhiqi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6月10日数据结构——堆相关的知识,希望对你有一定的参考价值。

堆的建立和输出

#include<stdio.h>
#include<stdlib.h>
#define maxSize 128
typedef int HElemType;
typedef struct node                  //大根堆的定义 
    HElemType data[maxSize];             //存放大根堆中元素的数组                        
    int n;                       //大根堆中的当前元素个数 
 Heap;

//大根堆的筛选
void siftDown (Heap &H, int start, int m)
    int i = start;
    int j = 2*i+1;
    HElemType tmp =  H.data[i];
    while(j<=m)
        if(j<m&&H.data[j]<H.data[j+1])
            j++;
        if(tmp >=H.data[j]) break;
        else 
            H.data[i]=H.data[j];
            i = j;
            j = 2*j+1;
        
    
    H.data[i] = tmp;
;

//初始化堆
void  HeapInint (Heap &H,int pre[],int m)
    for(int i=0;i<m;i++)
        H.data[i]=pre[i];
    
    H.n=m;
    for(int i=(H.n-2)/2;i>=0;i--)
        siftDown(H,i,H.n-1);
    
    for(int i=H.n-1;i>0;i--)
        HElemType tmp = H.data[0];
        H.data[0] = H.data[i];
        H.data[i] = tmp;
        siftDown(H,0,i-1);
    
 
 
//输出堆
void printMessage (Heap &H)
    printf("堆的所有数据!\n");
    for(int i =0;i<H.n;i++)
        printf("%d ",H.data[i]);
    
    return; 
 

main()
    Heap H;
    int m;
    printf("输入堆函数的个数:");
    scanf("%d",&m);
    int a[m];
    for(int i=0;i<m;i++)
        printf("输入第%d位堆元素:",i+1); 
        scanf("%d",&a[i]);
    
    HeapInint (H,a,m);
    printMessage(H);

 

以上是关于6月10日数据结构——堆的主要内容,如果未能解决你的问题,请参考以下文章

Day8-堆排序和移除元素

;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk

数据结构-堆排序

C语言 数据结构 堆

数据结构-排序内部排序

数据结构-排序内部排序