堆
2015-11-17 22:36
375 查看
堆:优先队列(Priority Queue),特殊的队列,取出元素的顺序是按照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序。
用完全二叉树来表示堆
从根结点到任意结点路径上结点序列的有序性
类型名称:最大堆(MaxHeap)
数据对象集:完全二叉树,每个结点的元素值不小于其子结点的元素值
用完全二叉树来表示堆
从根结点到任意结点路径上结点序列的有序性
类型名称:最大堆(MaxHeap)
数据对象集:完全二叉树,每个结点的元素值不小于其子结点的元素值
typedef struct HNode *Heap;//堆的类型定义 struct HNode{ ElementType *Data; int Size; int Capacity; }; typedef Heap MaxHeap;//最大堆 typedef Heap MinHeap;//最小堆 #define MAXDATA 1000; MaxHeap CreateHeap(int MaxSize) { MaxHeap H = (MaxHeap)malloc(sizeof(struct HNode)); H->Data = (ElementType *)malloc((MaxSize+1)*sizeof(ElementType)); H->Size = 0; H->Capacity = MaxSize; H->Data[0] = MAXDATA; return H; } bool IsFull(MaxHeap H) { return (H->Size == H->Capacity); } bool Insert(MaxHeap H,ElementType X) { int i; if(IsFull){ printf("最大堆已满"); return false; } i = ++H->Size; for(;H->Data[i/2 < X;i/2]) H->Data[i] = H->Data[i/2]; H->Data[i] = X; return true; } #define ERROR -1 bool IsEmpty(MaxHeap H) { return (H->Size == 0); } ElementType DeleteMax(MaxHeap H) { int Parent,Child; ElementType MaxItem,X; if(IsEmpty(H)){ printf("最大堆已为空"); return ERROR; } MaxItem = H->Data[1]; X = H->Data[H->Size--]; for(Parent=1;Parent*2<=H->Size;Parent=Child) }
相关文章推荐
- 【Android】Android插件开发 —— 基础入门篇
- C++primer习题3.14 vector<string>读写字符
- 程序员之估算能力
- WIN32控制台下的串口通信程序
- JAVA中String字符串的各种基本操作
- 和尚特烦恼1——是不是素数
- mybatis java.sql.SQLException: ORA-00907: 缺失右括号
- Android源码角度分析View的scrollBy()和scrollTo()的参数正负问题
- mvn常用命令
- Multipart/form-data POST文件上传详解 理论 简单的HTTP POST 大家通过HTTP向服务器发送POST请求提交数据,都是通过form表单提交的,代码如下: <form me
- Elasticsearch 文件目录解释
- WEB SSH之Shellinabox
- UI Button
- C++程序习题-将字符串按逆序输出[1.15]
- QT5利用chromium内核与HTML页面交互
- FormData在IE下上传文件报unexpected end of stream的一种解法
- UI_UITextField_UIButton
- hdu2043
- C++经典面试题之---String类
- 全功能智能车之暂时放弃PC端程序的研究(第十篇)