堆的实现(优先级队列的基础)
1.概览
- 由于堆是一棵完全二叉树,所以可以使用vector存储数据
- (0位置不放数据) 任意
节点i,其左儿子为2i,其右儿子为2i+1,其父亲为i/2(下取整) - 堆算法主要包含三个:插入(上滤操作)、删除(下滤操作)、建堆(循环下滤操作)
2.上滤即插入的过程
- 主要思想:当要插入元素x时,在最后的位置建立一个空穴,判断该空穴是否能放下x,若不能,则上滤空穴(即将父亲的值填入空穴,而将父亲作为新的空穴)持续上述过程,直到找到合适位置
void insert(ElementType& x,priorityQueue H)
{int i;//处理heap空间不足的情况for(int i=++H->size;H->Elements[i/2]>x;i/=2)H->Elements[i]=H->Elements[i/2];H->Elements[i
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
