1. 程式人生 > 其它 >SSH 的使用和配置

SSH 的使用和配置

堆結構是一種陣列物件,是一棵完全二叉樹。

性質

若當前節點編號為i,父結點則為i/2,左孩子為2i,右孩子為2i+1。

堆的結點數\(\le\)陣列長度len

下圖為一個大根堆:每個結點均小於其父結點,樹根是堆中最大的結點,小根堆反之。

新增

往堆中新增一個元素。

重複n次新增操作,即可建立一個小根堆。

實現流程(以小根堆為例)

先在堆尾加入1個元素,並把這個結點置為當前結點。

比較當前結點和它的父結點的大小,

如果當前結點小於父結點,交換它們的值,把父結點置為當前結點。

重複以上過程。

如果當前結點大於等於父結點,結束。

取出堆頂

從堆中取出並刪除一個元素。

實現流程(以小根堆為例)

取出根結點的值。

把堆的最後一個結點(len)放到根的位置上,把根覆蓋掉。

把堆的長度減一。

把根結點置為當前結點。

如果當前節點無兒子(pa>len/2),結束。

否則,比較當前節點與其子節點的值,

如果當前節點的值小於等於其子節點,結束。

反之則交換這兩個結點的值,重複上述步驟,直至結束。

優先佇列

priority_queue<Type,Container,Functional>

Type是資料型別,Container是容器型別。

(Container必須是用陣列實現的容器,比如vector,deque等,但不能用list,STL裡預設用vector)

Functional是比較函式,當需要用自定義的資料型別時才需要傳入這三個引數,使用基本資料型別時,只需要傳入資料型別,預設是大根堆。

標頭檔案

include

定義小根堆

priority_queue<int,vector,greater>q;//升序佇列

定義大根堆

priority_queue<int,vector,less>q;//降序佇列

基本操作

empty()

如果佇列為空,則返回真。

pop()

刪除隊頭元素,即刪除第一個元素。

push()

加入一個元素。

size()

返回優先佇列中擁有的元素個數。

top()

返回優先佇列隊頭元素,即優先順序最高的元素。

在預設的優先佇列中,優先順序高的先出隊。

在預設的int型中先出隊的為較大的數。

堆排序

並非原創,僅是整理,請見諒