数据结构:堆
堆(一种完全二叉树) 大顶堆 :父亲节点的指大于等于孩子结点的值 小顶堆 :父亲节点的值小于等于孩子结点的值 用处:优先队列的实现 对于一个给定初始序列,调整为堆的方法:从下到上,从右到左,如果有调整,在新位置看看有没有其他调整。 //堆的数据结构实现(数组实现) const int maxn=100;//最大结点数 int heap[maxn]; int n= 10;//n为当前用的节点个数,可以更改 //建堆的过程是向下调整,写的是大顶堆的 void downAdjust(int low,int high)//low为开始结点,high为结束结点 { int i=low;/欲调整结点 int j=i*2; while(j<=high)//孩子结点在范围内 { //确认左孩子右孩子的大小 if(j+1<=high&&heap[j]<heap[j+1]) j=j+1; if(heap[i]<heap[j]) { swap(heap[i],heap[j]);//交换两个结点的值 //更新i,j为下次循环做准备 i=j; j=2*i; } else break; } } //建堆,根据从下往上,从左往右的原则,所以倒着调整,非叶子结点的个数是n/2,从1开始为有效值 void create() { for(int i=n/2;i>=1;i--) { downAdjust(i,n); }