数据结构——堆的C语言实现
1.什么是堆?
2.堆的抽象数据类型描述
3.堆的C语言实现
#include<stdio.h>
#include<stdlib.h>#define ElementType int
#define MaxData 100
typedef struct HeapStruct *MaxHeap;
struct HeapStruct{ElementType *Elements;int Size;int Capacity;
};//1.初始化
MaxHeap Create(int MaxSize)
{MaxHeap H;H=(MaxHeap)malloc(sizeof(struct HeapStruct));H->Elements=malloc((MaxSize+1)*sizeof(ElementType));H->Size=0;H->Capacity=MaxSize;H->Elements[0]=MaxData;return H;
}//2.判断堆是否满
int IsFull(MaxHeap H)
{return H->Size==H->Capacity;
}//3.插入
void Insert(ElementType item,MaxHeap H)
{int i;if(IsFull(H)){printf("堆已满\n");return;}i=++H->Size;for(;H->Elements[i/2]<item;i/=2){H->Elements[i]=H->Elements[i/2];}H->Elements[i]=item;
}//4.判断堆是否为空
int IsEmpty(MaxHeap H)
{return H->Size==0;
}//5.删除最大值
ElementType DeleteMax(MaxHeap H)
{int Parent,Child;ElementType MaxItem,temp;if(IsEmpty(H)){printf("堆为空,无法删除\n");return;}MaxItem=H->Elements[1];temp=H->Elements[H->Size--];for(Parent=1;Parent*2<=H->Size;Parent=Child){Child=Parent*2;if(Child!=H->Size&&(H->Elements[Child]<H->Elements[Child+1])){Child++;}if(temp>=H->Elements[Child]){break;}else{H->Elements[Parent]=H->Elements[Child];}}H->Elements[Parent]=temp;return MaxItem;
}int main()
{int i;MaxHeap H;H=Create(10);Insert(32,H);Insert(18,H);Insert(21,H);Insert(12,H);Insert(15,H);for(i=0;i<=H->Size;i++){printf("%d ",H->Elements[i]);}printf("\n");Insert(45,H);for(i=0;i<=H->Size;i++){printf("%d ",H->Elements[i]);}printf("\n");int DMax;DMax=DeleteMax(H);for(i=0;i<=H->Size;i++){printf("%d ",H->Elements[i]);}printf("\n");return 0;
}
数据结构——堆的C语言实现相关推荐
- 数据结构——队列的C语言代码实现
系列文章目录 数据结构--顺序表的C语言代码实现 数据结构--八种链表的C语言代码实现 数据结构--栈的C语言代码实现 数据结构--队列的C语言代码实现 数据结构--堆的C语言代码实现 文章目录 系列 ...
- java堆 数据结构 堆_Java中的紧凑堆外结构/组合
java堆 数据结构 堆 在上一篇文章中,我详细介绍了代码对主内存的访问方式的含义. 从那时起,我就在Java中可以做什么以实现更可预测的内存布局提出了很多疑问. 有些模式可以使用数组支持的结构来应用 ...
- 《数据结构与算法 Python语言描述》 读书笔记
已经发布博客 <数据结构与算法 Python语言描述> 读书笔记 第二章 抽象数据类型和Python类 2.1 抽象数据类型abstract data type:ADT 2.1.1 使用编 ...
- 《数据结构与算法 Python语言实现》书评与学习心得
做为Python小白,本人几个月前读完了Mark Lutz的1400页巨著<Learning Python>(太TM啰嗦了,读过的请举手),本打算继续学习下一步<Programmin ...
- s数据结构替换子表java版_数据结构与算法分析Java语言描述(第3版) PDF和源码免费 下载...
<数据结构与算法分析Java语言描述(第3版)>PDF和源码免费 下载 免积分下载 用户下载说明: 图书简介: 数据结构:Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教 ...
- 《数据结构与算法 C语言版》—— 3.8习题
本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第3章,第3.8节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.8习题 1名 ...
- 《数据结构与算法 C语言版》—— 2.5上机实验
本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第2章,第2.5节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.5上机实验 实 ...
- 《数据结构与算法 C语言版》—— 2.7习题
本节书摘来自华章出版社<数据结构与算法 C语言版>一 书中的第2章,第2.7节,作者:徐凤生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.7习题 1描 ...
- 堆的C语言实现——堆与堆排序(二)
堆的C语言实现--堆与堆排序(二) 堆的C语言实现--堆与堆排序(二) 头文件 初始化函数 下滤函数1(递归) 堆构造函数1(自底向上,递归) 下滤函数2(非递归,交换法) 下滤函数3(非递归,空穴法 ...
最新文章
- Python 如何查看内存地址
- 是否存在两台 MacOS 之间无缝切换的办法?
- git常用命令速查表【转】
- shell脚本输出带颜色字体
- stream获取filter
- 用MS SQL Server事件探查器来跟踪数据库的操作
- 今天学到的几个函数【二】
- 使用Git初始化项目时操作
- python有几种容器_Python中几种内置的容器(Containers)类型:列表、字典、集合和元组的比较和该注意的点...
- vue如何保存登录状态到全局?【vue状态管理】
- Unity 工具之 UniWebView 内嵌网页/浏览器到应用中,并且根据UGUI大小放置(简单适配UGUI)
- CentOS7网卡驱动安装过程
- ZipEntry的使用
- python下opencv安装
- 什么是Power BI?
- java画图消除锯齿_java – JButton文本的消除锯齿
- 如何判断Hadoop集群是否搭建成功
- Bulldog靶机渗透
- java中设置基偶隔行换色_Excel2016中奇偶行填充不同颜色的方法
- 不填写内容用哪个斜杠代替_【几月几日怎么写斜杠】作文写作问答 - 归教作文网...
热门文章
- LeetCode 1664. 生成平衡数组的方案数(前缀和+后缀和)
- LeetCode 1548. The Most Similar Path in a Graph(动态规划)
- LeetCode MySQL 626. 换座位
- LeetCode 1026. 节点与其祖先之间的最大差值(二叉树DFS)
- java对象内存模型_Java对象的内存模型
- insert和update 锁等待_黑龙F5智感双全智能锁全球首发,掀起惊艳风潮
- java mysql geo_GEO数据库简介
- 10.数据库中的内置函数
- 数据分析-书籍整理(二)
- java sax解析xml_【转】java使用sax解析xml文件