堆 &heap & priority_queue &实现

[toc]

什么是堆?

堆是一种数据结构,可以用来实现优先队列

大根堆

大根堆,顾名思义就是根节点最大。我们先用小根堆的建堆过程学习堆的思想。

小根堆

下图为小根堆建堆过程


堆 &heap & priority_queue &实现_第1张图片
小根堆建堆过程

堆的操作

  • 上浮
  • 下沉
  • 插入
  • 弹出
  • 取顶
  • 堆排序

STL heap

所在库 #include

#include
#include
#include
#include
using namespace std;
bool cmp(int x,int y)
{
    return x>y;
}
int main()
{
    vector a;
    int num,n=10;
    for(int i=0;i::iterator i=a.begin();i!=a.end();i++) 
    {
        cout<<*i<::iterator i=a.begin();i!=a.end();i++) 
    {
        cout<<*i<::iterator i=a.begin();i!=a.end();i++) 
    {
        cout<<*i<::iterator i=a.begin();i!=a.end();i++) 
    {
        cout<<*i<::iterator i=a.begin();i!=a.end();i++) 
    {
        cout<<*i<

STL queue

所在库#include

#include
using namespace std;

struct student{
    int grade;
    string name;
};
struct cmp{
    bool operator() (student s1,student s2){
    return s1.grade < s2.grade;
    }
};

int main(int argc, char const *argv[])
{
    int n=10,num;
    /*
    1. push 【入队插到队尾】
    2. pop 【队首元素出队】
    3. size 【返回队列中元素的个数】
    4. front 【返回队列中第一个元素】
    5. back 【返回队列中最后一个元素】
    6. empty 【判断队列是否为空】
    */
    //cout<<"队列:"< a;
    for(int i=1;i pq_1;
    for(int i=1;i,greater > pq_2;
    for(int i=1;i,cmp> q;
    student s1,s2,s3;
    s1.grade = 90;
    s1.name = "Tom";

    s2.grade = 80;
    s2.name = "Jerry";

    s3.grade = 100;
    s3.name = "Kevin";

    q.push(s1);
    q.push(s2);
    q.push(s3);

    while(!q.empty()){
        cout<

你可能感兴趣的:(堆 &heap & priority_queue &实现)