`
u010815305
  • 浏览: 28606 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据结构学习之二叉堆

 
阅读更多
#ifndef _BinHeap_h
struct HeapStruct;
typedef struct HeapStruct *PriorityQueue;

PriorityQueue Initialize(int MaxElements);
void Destroy(PriorityQueue H);
void MakeEmpty(PriorityQueue H);
void Insert(ElementType X,PriorityQueue H);
ElementType DeleteMin(PriorityQueue H);
ElementType FindMin(PriorityQueue H);
int IsEmpty(PriorityQueue H);
int IsFull(PriorityQueue H);

#endif
//一个堆数据结构将由一个数组,一个代表最大值的整数以及当前的堆大小组成
struct HeapStruct
{
int Capacity;
int Size;
ElementType *Elements;
}
//堆序性:在一个堆中,对于每一个节点X,X的父亲节点中的关键字小于或等于X中的关键字(根节点除外)

//优先队列的声明

PriorityQueue Initialize(int MaxElements)
{
PriorityQueue H;
if(MaxElements<MinPQSize)
Error("PriorityQueue size is too small");
H=malloc(sizeof(struct HeapStruct));
if(H==NULL)
FatalError("out of space");
H->Elements=malloc((MaxElements+1)*sizeof(ElementType));
if(H->Elements==NULL)
FatalError("out if space");
H->Capacity=MaxElements;
H->Size=0;
H->Elements[0]=MinData;
return H;
}
//插入一个二叉堆
void Insert(ElementType X.PriorityQueue H)
{
int i;
if(IsFull(H))
{
Error("PriorityQueue is full");
return ;
}
for(i=++H->Size;H->Elements[i/2]>X;i/=2)
/*对于数组中的任一位置i上的元素,其左儿子在位置2i上
右儿子在左儿子后的单元(2i+1),他的父亲在(1/2)
*/

H->Elements[i]=H->Elements[1/2];
H->Elements[i]=X;
}
//在二叉堆中执行DeleteMin
ElementType DeleteMin(PriorityQueue H)
{
int i,Child;
ElementType MaxElement,LastElement;
if(IsEmpty(H)
{
Error("PriorityQueue is empty");
return H->Elements[0];
}
MinElement=H->Elements[1];
LastElement=H->Elements[H->Size--];


for(i=1;i*2<=H->Size;i=Child)
{
Child=i*2;
if(Child!=H->Size&&H->Elements[Child+1]
<H->Elements[Child])
Child++;
if(LastElement>H->Elements[Child])
H->Elements[i]=H->Elements[Child];
else
break;

}
H->Elements[i]=LastElement;
return MinElement;
}
int IsEmpty( PriorityQueue H )
{
return H->Size == 0;
}

int IsFull( PriorityQueue H )
{
return H->Size == H->Capacity;
}

void Destroy( PriorityQueue H )
{
free( H->Elements );
free( H );
}
ElementType FindMin( PriorityQueue H )
{
if( !IsEmpty( H ) )
return H->Elements[ 1 ];
Error( "Priority Queue is Empty" );
return H->Elements[ 0 ];
}
分享到:
评论

相关推荐

    数据结构二叉树二叉搜索树堆相关C++代码.docx

    数据结构二叉树二叉搜索树堆相关C++代码.docx

    数据结构学习资料

    此书很多高级部分,真的不得不佩服作者的编排,层层深入,尤其是二叉堆,斜堆,二项堆,Fibonacci堆那段。然后伸展树和Fibonacci堆又给联系起来了。均摊复杂度分析。。。。做到这种程度上,也就不难理解,为什么这个...

    数据结构-从应用到实现 (java版)

    主要内容包括:算法效率的输入规模、阶和大O,数据结构的无序和有序列表,队列和栈基于数组和链表的设计实例,递归详解,二叉查找树和AVL树,堆、散列表和排序以及图论等。对于每一种数据结构的性质和用途,《计算机...

    Python实现二叉堆

    在前面的章节里我们学习了“先进先出”(FIFO)的数据结构:队列(Queue)。队列有一种变体叫做“优先队列”(Priority Queue)。优先队列的出队(Dequeue)操作和队列一样,都是从队首出队。但在优先队列的内部,...

    linux程序实验报告,数据结构(红黑树、堆、栈、二叉搜索树、队列、链表、图)的c代码实现+源代码+文档说明+实验报告

    linux程序实验报告,数据结构(红黑树、堆、栈、二叉搜索树、队列、链表、图)的c代码实现+源代码+文档说明+实验报告 - 小白不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的课程设计,代码都测试...

    计算机+数据结构与算法+学习路线+蓝桥杯

    在掌握了基础算法和数据结构后,学习者可以进一步学习一些进阶的算法: 动态规划:背包问题、最长公共子序列、最短路径等。 字符串算法:KMP算法、后缀数组、后缀自动机等。 搜索算法:A算法、IDA算法、蒙特卡洛树...

    数据结构学习-教程与代码

    常见的树结构包括二叉树、二叉搜索树、平衡二叉树、堆等。 图(Graph):由节点和边组成的非线性数据结构,用于表示各种关系。常见的图算法包括最短路径算法、深度优先搜索(DFS)、广度优先搜索(BFS)等。 哈希...

    数据结构(C语言版)[严蔚敏]

    《数据结构》(c语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。学了数据结构后,许多以前写起来很繁杂的代码现在写起来很清晰明了. 本书的前半部分从抽象数据类型的...

    挑战程序设计竞赛2:算法和数据结构【试读】

    详细讲解了算法与复杂度、初等和高等排序、搜索、递归和分治法、动态规划法、二叉搜索树、堆、图、计算几何学、数论等算法和数据结构的关键知识点,既可以作为挑战程序设计竞赛的参考书,也可以用来引导初学者系统...

    《数据结构》(C语言版)严蔚敏

    《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。学了数据结构后,许多以前写起来很繁杂的代码现在写起来很清晰明了. 本书的前半部分从抽象数据类型的...

    严蔚敏:数据结构题集(C语言版)

    《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参考教材。本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和排序的...

    Java数据结构和算法中文第二版(1)

    Java数据结构和算法中文第二版(1) Java数据结构和算法中文第二版(2) 【内容简介】 本书可帮助读者: 通过由基于JAVA的演示所组成的可视专题讨论来掌握数据结构和算法 学会如何为常见和不太常见的编程条件选择...

    Java数据结构和算法中文第二版

    Java数据结构和算法介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解。全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、...

    用 Ja​​vaScript 实现的算法和数据结构,并附有解释和进一步阅读的链接

    该存储库包含许多流行算法和数据结构的基于 JavaScript 的示例。 每个算法和数据结构都有自己单独的自述文件,其中包含相关解释和供进一步阅读的链接(包括 YouTube 视频的链接)。 阅读其他语言版本: 简体中文、...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    在我国学习计算机的人中很少有不知道谭浩强教授的。他善于用容易理解的方法和语言说明复杂的概念。许多人认为他开创了计算机书籍贴近大众的新风,为我国的计算机普及事业做出了重要的贡献。 谭浩强教授曾获全国高校...

    算法/数据结构/Python/剑指offer/机器学习/leetcode

    算法/数据结构/Python/剑指offer/机器学习/leetcode 数据结构markdown格式 链表及常见操作 平衡查找树AVL 三种方法检测变位词Anagram 构建堆 二分查找 二叉查找树 二叉树 冒泡排序 英语单词拼写检查算法 ...

    [数据结构(C语言版)].严蔚敏_吴伟民.高清扫描版.rar

    《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。 本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和...

    基础数据结构----刘汝佳

    线性结构 二叉堆 并查集 哈希表 应用举例

    acm 2201

    二叉堆,学习数据结构的好题

    数据结构PPT文件

    大连东软信息学院的学习平台的数据结构PPT文件,已打包,有需要的的话可以直接下载。压缩包内文件: 01课程介绍和绪论.pptx 02线性表的定义&顺序表表示和实现.pptx 03顺序表实现&链式表的基本概念.pptx 04链式表表示...

Global site tag (gtag.js) - Google Analytics