堆 優先佇列

2021-08-07 22:44:02 字數 1599 閱讀 2001

是乙個完全二叉樹(除最後一行外,其餘部分為滿二叉樹),且父親永遠比孩子大或小。

用乙個陣列實現i的孩子為i*2和i*2+1,父親為i/2。

在實際操作中可以用priority_queue《型別》來表示大根堆

用priority_queue《型別,vector《型別》,greater《型別》 >來表示小根堆

注意:讓結構體如佇列時首先要定義它的比較方式

1.迅速輸出最大值,用pop輸出陣列的第一位

輸出第乙個,並把最後乙個提上來,並比較使之合法

2.用——.push()輸入

先加到陣列尾,再與父親比較,過大則交換

3.用——.empty()可以判斷其中還有沒有數。

4.用——.init()初始化

#include 

using

namespace

std;

const

int n = 300000;

struct heap

void push (int x)

heap[i] = heap[p];

i = p;

}heap[i] = x;

}int pop()

heap[i] = heap[lson];

i = lson;

}heap[i] = x;

return ret;

}bool empty()

};int a[n];

int main ()

//start here

clock_t mystart = clock();

for (int i = 0; i < n; i++)

while(!my_heap.empty())

clock_t myend = clock();

//end here

priority_queue heap;

clock_t start = clock();

for (int i = 0; i < n; i++)

while(!heap.empty())

clock_t end = clock();

cout

<< "running time of xjoi machine is:"

<< static_cast

(myend-mystart)/clocks_per_sec*1000

<< "ms"

<< endl;

cout

<< "running time stl is:"

<< static_cast

(end-start)/clocks_per_sec*1000

<< "ms"

<< endl;

return

0;}

struct heap

void pop()

else}}

void push(int u)

}int top()

intsecond()

bool empty()

void print()

}};

優先佇列《堆》

1.模型 兩個基本操作 insert等價enqueue deletemin刪除最小者 dequeue 2.簡單的實現 1 簡單鍊錶 遍歷刪除min或者排序刪除min 2 使用二叉查詢樹。反覆除去min會使得樹不平衡,並且bst還支援許多不需要的操作。3.二叉堆 優先佇列的實現普遍使用二叉堆,堆有兩個...

優先佇列 堆

印表機列印作業一般是放在佇列中的。如果按照先來先列印的順序,有乙個100頁的列印任務,那麼會讓後面短小的任務等待很長時間。更合理的做法也許是最後處理最耗時的列印任務,不管它是不是最後提交上來的。在多使用者作業系統中,作業系統讓哪個程式使用cpu,是需要決定從佇列裡面選擇的。一般做法是從隊頭獲得程式,...

優先佇列 堆

優先佇列 佇列是乙個操作受限的線性表,資料只能在一端進入,另一端出來,具有先進先出的性質。有時在佇列中需要處理優先順序的情況,即後面進入的資料需要提前出來,這裡就需要優先佇列。優先佇列是至少能夠提供插入和刪除最小值這兩種操作的資料結構。對應於佇列的操作,插入相當於入隊,刪除最小相當於出隊。鍊錶,二叉...