資料結構 大小堆

2021-07-16 05:04:59 字數 1777 閱讀 1480

如果有乙個關鍵碼的集合k = ,把它的所有元素按完全二叉樹 的順序儲存方式儲存在乙個一維陣列中,並滿足:ki <= k2*i+1 且 ki<= k2*i+2  (ki >= k2*i+1 且 ki >= k2*i+2) i = 0,1,2…,則稱這個堆為最小堆(或最大堆)。

最大堆和最小堆是二叉堆的兩種形式。

最大堆:根結點的鍵值是所有堆結點鍵值中最大者,且每個結點的值都比其孩子的值大。

最小堆:根結點的鍵值是所有堆結點鍵值中最小者,且每個結點的值都比其孩子的值小。

這樣我們就能根據圖大小堆的規則構建大小堆了

我們根據陣列arr 最終要建立這樣乙個樹

下面圖示流程是

建立 最小堆的過程

其實看懂了上面的流程,最小堆的**也就出來了。

下面把 最大堆的**就直接放在這了,當然還有一些操作,如:插入、刪除、堆頂元素之類的 

#include#include#includeusing namespace std;

//use a vector create heap

template class heapgeater

heapgeater(const t arr, size_t size) //size is elem_count

size_t root = size / 2 - 1; // the last leef_node of root

for (int index = root; index >= 0; index--)

}bool empty()

size_t size()

t& top()const

const t&top()

void insert(const t& data)

}} void remove(const t& data) }

protected:

void _adjustdown(size_t root)//adjust to max_heap

//confirm the root is max

if (_heap[child] > _heap[root])

else

}//end while

} void adjustup(int root) }

private:

std::vector_heap;

};/********test code**********/

void test_heapgeater()

; heapgeaterap(arr,8);

cout <

cout<< ap.size()<

資料結構 大小堆的實現及堆排序

堆一般指二叉堆,結構如下 圈內數字指下標,圈外為內容,如圖現在並不能稱為乙個堆,因為它並不滿足大堆也不滿足小堆的組成,下面介紹大堆和小堆的簡答介紹和實現 大堆是指每個父節點的數都大於自己的每個孩子節點的值 用到的演算法是讓大數上移迴圈至完成大堆 void adjustup size t child ...

6 資料結構 最小堆

開發過程,經常需要對資料集合進行維護。維護資料結合的資料結構可統稱為容器。最小堆是維護資料集合的容器的一種,最小堆具備如下性質 設v i 為位置i的元素值 1.對維護的n個元素,順序儲存於索引為1 n的陣列位置 2.對索引i,若索引2 i n,有v i v 2 i 若索引2 i 1 n,有v i v...

資料結構 簡單實現優先佇列(維護大小堆)

主要思想是堆排序裡面的維護大 小堆。top一直指向堆頂,而push pop要維護堆,pop出的值是top。注意 大根堆和小根堆只需要堆頂最大 小就行!偽 方法 push 引數 pop 下面引用自 24隻羊 堆和優先佇列 2.1 堆中新增元素和shift up 現在我們要新增元素52,先新增到索引為1...