堆是什麼?剛接觸到這個概念估計都摸不著頭腦,不知道堆是什麼樣個東西。簡單介紹下,
堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹結構。
堆結構的二叉樹儲存有兩種情況:
(1).最大堆:每個父節點的都大於孩子節點。
(2).最小堆:每個父節點的都小於孩子節點。
舉個例子可能好理解些,看下面:
熟悉了它的結構,給解釋下怎麼來構建這個堆。
對於他的實現,我們直接可以借用vector作為成員,因為使用到的陣列要實現增刪查改,增容是肯定會用到的,將傳過來的陣列全部push_back到vector中去,然後從最後乙個非葉子節點開始向下調整,知道最後調整玩根結點,就完成了堆的構成。
那麼什麼叫做向下調整了?
向下調整就是從第乙個非葉子節點作為一顆子樹開始調整,將大的資料放大父節點上,依次調整,直至調整到根節點為止
//把if (_a[parent]
else
}下面再重點介紹下pop函式的寫法,pop函式就相當於將根節點刪除了,我們轉換下思路,將根節點和最後乙個節點交換,然後就需要寫乙個向上調整的函式就行了。向上調整的思路:由於交換後根節點變成了最後乙個節點的值,比原來根節點的左右小,所以需要用左右節點中的大值將這個小值換下來。
其他函式:
void push(const t& x)
size_t top()
bool empty()
size_t size()
void print()
cout <
}
本文出自 「滴水」 部落格,請務必保留此出處 資料結構 堆的實現以及STL標準庫
資料結構 堆的實現以及stl標準庫 堆說的清新脫俗一點就是用類似完全二叉樹的方式來維護一組資料,增刪改查的時間複雜度在o 1 o logn 之間,一聽就很心動吧 堆大致分為兩類 大根堆和小根堆,簡單來說就是根節點是所有資料中最大 小,並且讓小的節點在上方。給一組資料 當然,現在這還只是個二叉樹 然後...
hashmap底層實現以及資料結構
hashmap實現原理 簡單一句話陣列鍊錶結構儲存,這裡entry是map中的靜態類,entry陣列預設長度為16,每個陣列上跟著乙個鍊錶,鍊錶什麼時候出現呢?就是在hashcode相同時出現,當put時候會生成乙個hashcode便於儲存位置,但是不避免hashcode相同的情況這個時候就存在鍊錶...
堆的基本實現以及堆排序
heap.h pragma once include include include include include includetypedef int hpdatatype typedef struct heap heap void heapcreat heap hp,hpdatatype a,...