堆结构
来源:互联网 发布:辛酉政变 知乎 编辑:程序博客网 时间:2024/06/06 02:26
堆的主要操作:
*建立一个堆
*往堆里添加新元素
*访问最大/最小值
*删除最大/最小值
模板如下:
#include<cstdio>#define MAX_SIZE 100int A[MAX_SIZE]={0,1,2,3,4,5,6,7,8,9},N=9; //下标从1开始 void downAdjustment(int A[],int idx);//向下调整 void buildHeap(){ int i; for(int i=N/2;i>=1;i--) downAdjustment(A,i);} void downAdjustment(int A[],int idx){ int leftChild= 2*idx; int rightChild= 2*idx+1; int max; if(leftChild > N) return; if( rightChild >N||(A[leftChild] > A[rightChild]) ) max=leftChild; else max=rightChild; if(A[idx] < A[max]){ int tmp=A[idx]; A[idx]= A[max]; A[max]=tmp; downAdjustment(A,max);//递归向下调整 } }//向上调整 void upAdjustment(int A[],int idx){ int parent= idx/2; if(parent < 1) return; if(A[idx] > A[parent]){ int tmp=A[idx]; A[idx]=A[parent]; A[parent]=tmp; upAdjustment(A,parent);//递归向上调整 }}//添加新元素 void addAElement(int ele){ A[++N] = ele; upAdjustment(A,N);}//访问最大值 int maxElement(){ return A[1]; } //删除最大值 void deleteMax(){ A[1]=A[N]; N--; downAdjustment(A,1);}int main(){ buildHeap(); for(int i=1;i<=N;i++) printf("%d ",A[i]); printf("\n--------\n\n"); addAElement(10); for(int i=1;i<=N;i++) printf("%d ",A[i]); deleteMax(); printf("\n---\n\n"); for(int i=1;i<=N;i++) printf("%d ",A[i]); return 0;}
0 0
- 堆结构
- 堆结构
- 堆结构的实现
- 堆结构的运用
- 数据结构--堆结构
- 1:实现堆结构
- 链式结构实现堆
- 树堆结构
- 实现堆结构
- 实现堆结构
- 树-堆结构
- 实现堆结构
- 4078:实现堆结构
- C++构建堆结构
- JVM堆内存结构
- 【模板】堆的结构
- 堆结构——最大堆
- 堆溢出(一)堆结构
- ssh2项目报错原因:浏览器栏中输入的路径不对
- 深度学习准备之Ubuntu下装显卡驱动
- java设计模式之工厂方法模式
- 蓝桥杯 算法提高 队列操作
- Helloworld
- 堆结构
- 2016届蓝桥杯牌型种类(dfs算法)
- Weekly Training Farm 22 - B - ACM-ICPC Contest (背包)
- 服务器运维——RAID
- android横竖屏切换的生命周期方法
- SpringMVC与Struts2区别与比较总结
- TQ2440的yaffs2文件系统移植出问题及解决
- java中异常的抛出:throw throws
- 我的科研生活2017-2-4