树的应用——最大堆的建立
来源:互联网 发布:c语言播放音乐linux 编辑:程序博客网 时间:2024/06/03 16:56
#include<stdio.h>
#include<stdlib.h>
typedef struct HNode *Heap;//堆的定义类型
struct HNode{
int* Data;//存储元素的数组
int Size;//堆中当前元素的个数
int Capacity;//堆的最大容量
};
typedef Heap MaxHeap;
void Print(MaxHeap H);
void PercDown(MaxHeap H,int p)
{
//下滤,将H中H->Data[p]为根的子堆调整为最大堆
int Parent,Child;
int X;
X=H->Data[p];//取出根节点存放的值
for(Parent=p;Parent*2<=H->Size;Parent=Child){
Child=Parent*2;
if(Child!=H->Size &&(H->Data[Child]<H->Data[Child+1])){
Child++;//Child指向左右节点中较大者
}
if(X>H->Data[Child])break;//找到了合适的位置
else //下滤
H->Data[Parent]=H->Data[Child];
}
H->Data[Parent]=X;
}
void BuildHeap(MaxHeap H)
{
//调整H->Data[]中的元素,使其满足最大堆的有序性
//这里假设所有的H->Size的元素都已经存在H->Data[]中
int i;
//从最后一个节点的父节点开始,到根节点1
for(i=H->Size/2;i>0;i--){
PercDown(H,i);
Print(H);
printf("\n");
}
}
void Print(MaxHeap H)
{
int i;
for(i=1;i<H->Size+1 ;i++){
printf("%d ",H->Data[i]);
}
}
int main()
{
freopen("C:\\Users\\DELL\\Desktop\\新建文件夹 (2)\\text.txt","r",stdin);
MaxHeap Head;
Head=(MaxHeap)malloc(sizeof(struct HNode));
scanf("%d",&Head->Size);
Head->Data=(int*)malloc((Head->Size+10)*sizeof(int));
int i;
for(i=1;i<Head->Size+1;i++){
scanf("%d",&Head->Data[i]);
}
Print(Head);
printf("\n");
BuildHeap(Head);
Print(Head);
return 0;
}
#include<stdlib.h>
typedef struct HNode *Heap;//堆的定义类型
struct HNode{
int* Data;//存储元素的数组
int Size;//堆中当前元素的个数
int Capacity;//堆的最大容量
};
typedef Heap MaxHeap;
void Print(MaxHeap H);
void PercDown(MaxHeap H,int p)
{
//下滤,将H中H->Data[p]为根的子堆调整为最大堆
int Parent,Child;
int X;
X=H->Data[p];//取出根节点存放的值
for(Parent=p;Parent*2<=H->Size;Parent=Child){
Child=Parent*2;
if(Child!=H->Size &&(H->Data[Child]<H->Data[Child+1])){
Child++;//Child指向左右节点中较大者
}
if(X>H->Data[Child])break;//找到了合适的位置
else //下滤
H->Data[Parent]=H->Data[Child];
}
H->Data[Parent]=X;
}
void BuildHeap(MaxHeap H)
{
//调整H->Data[]中的元素,使其满足最大堆的有序性
//这里假设所有的H->Size的元素都已经存在H->Data[]中
int i;
//从最后一个节点的父节点开始,到根节点1
for(i=H->Size/2;i>0;i--){
PercDown(H,i);
Print(H);
printf("\n");
}
}
void Print(MaxHeap H)
{
int i;
for(i=1;i<H->Size+1 ;i++){
printf("%d ",H->Data[i]);
}
}
int main()
{
freopen("C:\\Users\\DELL\\Desktop\\新建文件夹 (2)\\text.txt","r",stdin);
MaxHeap Head;
Head=(MaxHeap)malloc(sizeof(struct HNode));
scanf("%d",&Head->Size);
Head->Data=(int*)malloc((Head->Size+10)*sizeof(int));
int i;
for(i=1;i<Head->Size+1;i++){
scanf("%d",&Head->Data[i]);
}
Print(Head);
printf("\n");
BuildHeap(Head);
Print(Head);
return 0;
}
0 0
- 树的应用——最大堆的建立
- 最大堆的建立
- 最大堆的建立和堆排序
- 最大堆最小堆的建立
- 最大二叉堆的建立以及最大堆排序
- STL 最大堆、最小堆的应用
- 建立最大堆—数组—Java
- 最大堆的建立-如何调整所考虑的结点
- 堆的应用——在N个数中找到最大的前K个数
- 堆的建立&堆排序
- 最小堆的建立
- 堆的建立
- 堆(Heap)的建立
- 大小堆的建立
- 最小堆的建立
- 二叉堆的建立
- 【数据结构】堆的建立
- 建立最大堆
- Socket长连接和短连接
- NYOJ--1058--dfs--部分和问题
- 文件监控
- Ural 2040 Palindromes and Super Abilities 2
- Bar 3D 和Pie 3D的统计图形
- 树的应用——最大堆的建立
- wpf C# wcf运行访问权限问题
- 对象序列化和反序列化
- Sqlite3数据库
- NYOJ_1225_Rectangles【dp】
- opencv1.0环境配置
- 批量爬虫——该网址下所有文件
- Java filter中的chain.doFilter详解
- C#对文件操作(基本的读写以及压缩和解压)