dw手机网站怎么做,外贸网站推广服务,网站建设g,nat123做网站 查封堆默认从数组下标为1开始存储。
const int N201000;
int heap[N];
int len;
插入操作#xff1a;
将元素插入到堆的末尾位置向上调整。
void up(int k){while(k1heap[k/2]heap[k]){swap(heap[k],heap[k/2]);k/2;}
}
//len为当前存在元素长度
void Inser…堆默认从数组下标为1开始存储。
const int N201000;
int heap[N];
int len;
插入操作
将元素插入到堆的末尾位置向上调整。
void up(int k){while(k1heap[k/2]heap[k]){swap(heap[k],heap[k/2]);k/2;}
}
//len为当前存在元素长度
void Insert(int x){heap[len]x;up(len);
}弹出堆顶元素
将堆顶元素和堆中最后一个元素交换位置将堆的长度减一再将新的堆顶元素向下调整。
void down(int k){while(kklen){int jkk;if(j1lenheap[j1]heap[j])j;if(heap[k]heap[j])break;swap(heap[j],heap[k]);kj;}
}void pop(){swap(heap[1],heap[len]);len--;down(1);
}
删除其中任意一个元素:
将该元素和队尾元素互换如果队尾元素比该元素小尝试向上调整如果队尾元素比该元素大尝试向下调整。
void Delete(int p){if(plen){len--;return ;}int xheap[p],yheap[len];swap(heap[p],heap[len]);len--;if(yx){up(p);}else {down(p);}
}