zoukankan      html  css  js  c++  java
  • 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("堆的所有数据!
    ");
        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);
    }
  • 相关阅读:
    手工测试
    测试理论
    MySQL常用语法
    Linux设置静态ip
    设计模式
    Shiro
    TreeSet和TreeMap
    UDP和反射
    Linux归纳
    Spring+SpringMVC+Mybatis整合
  • 原文地址:https://www.cnblogs.com/lvzhiqi/p/10998719.html
Copyright © 2011-2022 走看看