最大堆資料結構

2021-10-18 07:39:16 字數 1754 閱讀 1302

儲存結構:堆中元素在陣列中是按照完全二叉樹層序儲存的。陣列起始結點為1。

下標特點:對於下標為i的結點,i/2為父節點,左右子結點分別為2i和2i+1。

最大堆特點:任一結點的值大於或者等於其子結點的值。

最小堆特點:任一結點的值小於或者等於其子結點的值。

#include

#include

#define maxdata 1000

typedef

struct hnode

*maxheap,minheap;

maxheap createheap

(int maxsize)

bool

isfull

(maxheap h)

bool

insert

(maxheap h,

int x)

i =++h-

>size;

for(

; h-

>data[i /2]

< x; i /=2

) h-

>data[i]

= x;

return

true;}

bool

isempty

(maxheap h)

intdeletemax

(maxheap h)

maxitem = h-

>data[1]

; x = h-

>data[h-

>size--];

for(parent =

1; parent *

2<= h-

>size; parent = child)

if(x >= h-

>data[child]

)break

;else

h->data[parent]

= h-

>data[child];}

h->data[parent]

= x;

return maxitem;

}int

main()

typedef

struct hnode

*maxheap,minheap;

maxheap createheap

(int maxsize)

最大堆插入元素後依然要保持完全二叉樹的性質。插入結點按照序號插入。

最大堆插入方式:由於最大堆從根節點到任何葉結點的路徑是遞降的有序數列,因此插入的方式是用插入結點和父結點比較大小,如果插入結點大則互換位置,反之則插入。

最大堆的刪除:取出根結點的最大元素值,同時刪除乙個結點(陣列中最後乙個單元即堆中的最後乙個結點)

哈夫曼樹構造(不唯一)

1.確定有n個權值的集合構造n棵單結點二叉樹。

2.選擇兩個最小的結點作為左右子樹,兩個結點的權值和作為父節點3.將整棵樹放入集合中,尋找集合中最小的結點和這個樹的父節點作為左右子樹,和作為父節點。

4.重複2,3的步驟直到集合為空。

經典資料結構之最大堆

最大堆和最小堆是常用的優先佇列。其概念也比較簡單,用樹的方式描述,就是,父節點比子節點大 最大堆 小則為最小堆。最大堆和最小堆廣泛用在有先後順序的任務排程中。比如cpu的任務排程等。先上 後面再詳細解釋和補充我的看法。標頭檔案 ifndef cbinarytree h included define...

資料結構 最大堆排序 python實現

二叉 堆資料結構是一種陣列物件。可以被視為一棵完全二叉樹。數中每個節點與陣列中存放該節點值的那個元素對應。樹的每一層都是填滿的。最後一層可能除外 最後一層從乙個節點的左子樹開始填 引用自 演算法導論 再抄一遍複習一下 從無序的陣列構建乙個完整的堆,最好及最壞的情況下,建立堆時間複雜度均為o nlgn...

資料結構之java實現的最大堆

二叉堆是乙個完全二叉樹,區別於滿二叉樹。當二叉堆的任意結點的值不大於其父親結點的值,那麼這個堆就是最大堆。最大堆是堆的兩種形式之一。根結點 亦稱為堆頂 的關鍵字是堆裡所有結點關鍵字中最大者,稱為大根堆,又稱最大堆 大頂堆 大根堆要求根節點的關鍵字既大於或等於左子樹的關鍵字值,又大於或等於右子樹的關鍵...