堆及其應用學習小結

2021-09-22 18:51:27 字數 946 閱讀 1590

堆及其應用

堆結構是一種陣列物件,它可以被視為一棵完全二叉樹。(如果一棵深度為k二叉樹,1至k-1層的結點都是滿的,即滿足2i-1,只有最下面的一層的結點數小於2i-1,並且最下面一層的結點都集中在該層最左邊的若干位置,則此二叉樹稱為完全二叉樹。)

樹中每個結點與陣列中存放該結點中值的那個元素相對應:

大根堆:除根節點外,父節點大,子節點依次減小;小根堆:除根節點外,父節點小,子節點依次增大。

堆的操作:用堆的關鍵部分是兩個操作:put操作,即往堆中加入乙個元素;get操作,即從堆中取出並刪除乙個元素。

put:

在堆尾加入乙個元素,並把這個結點置為當前結點,比較當前結點和它父結點的大小,如果當前結點小於父結點,則交換它們的值,並把父結點置為當前結點。重複這個過程直至單調結束。

若當前結點大於等於父結點,則不用調整。

get:

(1)取出堆的根結點的值。

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

(3)把根結點置為當前父結點pa。

(4)如果pa無兒子(pa>len/2),則轉(6);否則,把pa的兩(或一) 個兒子中值最小的那個置為當前的子結點son。

(5)比較pa與son的值,如果fa的值小於或等於son,則轉(6);否則,交換這兩個結點的值,把pa指向son,轉(4)。

(6)結束。

int get() //heap[1]為堆頂

return res;

}

使用c++標準模板庫stl:

int get()

堆及其應用

對於堆的資料結構的介紹,在網上搜了下,具體講的不是很多。發現比較好的一篇介紹堆的部落格是在此感謝他。通過對上面那篇部落格的學習,然後自己也去翻了下 演算法導論 裡面關於堆排序 heapsort 的介紹。這樣就對堆有了更加深刻的認識,在此,我結合自己的一點點理解,主要還是基於上面那篇部落格的內容 主要...

堆及其應用

應用1.優先順序佇列 優先順序佇列 是不同於先進先出佇列的另一種佇列。每次從佇列中取出的是具有最高優先權的元素。pragma once include include include include heap.h using namespace std template class priority...

堆及其操作

堆及其操作 include include include define maxdata 1000 該值根據具體情況定義為大於堆中所有可能元素的值 define error 1 錯誤標誌 應根據具體情況定義為堆中不可能出現的元素值 堆的c語言描述 struct hnode struct hnode ...