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日数据结构——堆的主要内容,如果未能解决你的问题,请参考以下文章