最小堆的建立
来源:互联网 发布:python运行环境搭建 编辑:程序博客网 时间:2024/06/01 07:53
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 20#define OK 1#define ERROR 0typedef int Status;typedef int ElemType;typedef struct { ElemType heapArray[MAXSIZE]; int length; //数组当前长度}MinHeap;//对数组进行元素的输入Status Init_heapArray(MinHeap * M,int Number){ ElemType data; for(int i=0;i<Number;i++) { scanf("%d",&data); M->heapArray[i]=data; M->length++; } return OK;}//最小堆的初始化Status Init_MinHeap(MinHeap * M){ int Number; M->length=0; printf("请输入数组的元素个数:\n"); scanf("%d",&Number); printf("请输入%d个数据:\n",Number); Init_heapArray(M,Number); return OK;}int MinHeap_Leftchild(int pos) //返回左孩子的下标{ return 2*pos+1;}int MinHeap_Rightchild(int pos) //返回右孩子的下标{ return 2*pos+2;}int MinHeap_Parent(int pos) //返回双亲的下标{ return (pos-1)/2;}void MinHeap_SiftDown(MinHeap * M,int left) //从left开始向下筛选{ int i=left; //标识父结点 int j=MinHeap_Leftchild(i); //用于记录关键值较小的子结点 ElemType temp=M->heapArray[i]; //保存父结点 while(j<M->length) //过筛 { if((j<M->length-1)&&(M->heapArray[j]>M->heapArray[j+1])) //若有右子结点,且小于左子结点 { j++; //j指向右子结点 } if(temp>M->heapArray[j]) //如果父结点大于子结点的值则交换位置 { M->heapArray[i]=M->heapArray[j]; i=j; j=MinHeap_Leftchild(j); } else //堆序性满足时则跳出 { break; } } M->heapArray[i]=temp;} //建立最小堆void Create_MinHeap(MinHeap * M){ for(int i=M->length/2-1;i>=0;i--) { MinHeap_SiftDown(M,i); }}//输出元素void Print(MinHeap * M){ for(int i=0;i<M->length;i++) { printf("%d ",M->heapArray[i]); } printf("\n");}int main(){ MinHeap M; Init_MinHeap(&M); printf("输出先前元素:\n"); Print(&M); Create_MinHeap(&M); printf("输出最小堆的元素:\n"); Print(&M); return 0;}
0 0
- 最小堆的建立
- 最小堆的建立
- 最大堆最小堆的建立
- 建立最小堆的下滑算法
- 最小堆怎么建立
- 最小堆建立
- priority_queue 建立最小堆
- 数据结构与算法之最小堆的建立
- 堆的建立&堆排序
- c++使用vector建立最大堆和最小堆
- C++中使用vector建立最大堆和最小堆
- 最大堆的建立
- 堆的建立
- 堆(Heap)的建立
- 大小堆的建立
- 二叉堆的建立
- 【数据结构】堆的建立
- 最小堆的实现
- 设计模式C++描述----11.组合(Composite)模式
- Android自定义动态布局 — 多图片上传
- SpannableString属性详解
- 小知识点,菜鸟杂谈
- poj 1236 Network of Schools 【Tarjan】
- 最小堆的建立
- Number类型在LUA语言中的演化1
- n阶多项式拟合与n阶矩阵求逆的C语言实现
- Instancing modes in WCF
- SAT阅读语法之CDs练习题
- 查看远程Redis服务器的版本
- 欢迎使用CSDN-markdown编辑器
- CoreData教学完整版(封装我们自己的CoreData工具)_Dylan
- Android Studio 调试跟踪代码