大根堆 队列 知识点(不断更新)

大根堆:根节点(亦称堆顶)的关键字是堆里所有结点关键字中的最大者,又称最大堆。大根堆要求根节点的关键字既≥左子树的关键字值,又≥右子树的关键字值;

注意:

  1. 堆中任一子树也是堆;

  2. 二叉堆(k叉堆);

———

  • 堆是一棵全然二叉树(假设共有h层,那么1~h-1层均满,在h层连续缺失若干个右叶子);

  • 小根堆的根节点是最小值,大根堆的根节点是最大值;


优先队列:优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素。但是它有一个特性,就是队列中最大的元素总是位于队首,所以出队时,并非按照先进先出的原则进行,而是将当前队列中最大的元素出队。这点类似于给队列里的元素进行了由大到小的顺序排序。元素的比较规则默认按元素值由大到小排序,可以重载“<”操作符来重新定义比较规则。

优先队列可以用向量(vector)或双向队列(deque)来实现(注意list container不能用来实现queue,因为list的迭代器不是任意存取iterator,而pop中用到堆排序时是要求randomaccess iterator的):

priority_queue<vector<int>, less<int> > pq1;     // 使用递增less<int>函数对象排序

priority_queue<deque<int>, greater<int> > pq2;   // 使用递减greater<int>函数对象排序

其成员函数有“判空(empty)” 、“尺寸(Size)” 、“栈顶元素(top)” 、“压栈(push)” 、“弹栈(pop)”等。

猜你喜欢

转载自blog.csdn.net/qq_38735931/article/details/81393428
今日推荐