資料結構 堆的實現以及簡單的函式

2021-07-12 05:01:55 字數 1394 閱讀 9638

堆是什麼?剛接觸到這個概念估計都摸不著頭腦,不知道堆是什麼樣個東西。簡單介紹下,

堆資料結構是一種陣列物件,它可以被視為一棵完全二叉樹結構。

堆結構的二叉樹儲存有兩種情況:

(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,...