資料結構之 堆(Heap)

2021-10-08 08:00:14 字數 998 閱讀 2368

堆(heap)是電腦科學中一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵完全二叉樹的陣列物件。同時堆是一種特殊的「佇列

既然說堆是完全二叉樹,那麼就得介紹下什麼是完全二叉樹

定義:若設二叉樹的高度為h,除第h層外,其它各層(1~h-1)的結點數都達到最大個數,且第h層所有的節點都連續集中在最左邊,這就是完全二叉樹。

完全二叉樹是由滿二叉樹而引出來的。對於深度為k,有n個結點的二叉樹,當且僅當其每乙個結點都與深度為k的滿二叉樹中編號從1至n的結點一一對應時稱之為完全二叉樹。

若一棵二叉樹至多只有最下面兩層的結點的度數可以小於2,並且最下層的結點都集中在該層最左邊的若干位置上,則此二叉樹為完全二叉樹。

設n0是度為0的結點總數(即葉子結點數),n1是度為1的結點總數,n2是度為2的結點總數,則n0=n2+1

n層完全二叉樹,在1~n-1層,節點個數為2^(n-1),在第n層,節點數範圍為[1,2 ^ (n-1)]

堆的兩個特性:

結構性:用陣列表示的完全二叉樹

任意節點的關鍵字是其子樹所有節點的最大值(或者最小值)

最大堆

最小堆

把最大堆和最小堆的邏輯結構對映到陣列中,如下圖

陣列arr下標從零開始

對於最大堆:arr[i] >= arr[2i + 1] && arr[i] >= arr[2i + 2]

對於最小堆:arr[i] <= arr[2i + 1] && arr[i] <= arr[2i + 2]

資料結構之堆Heap

1.概述 堆 也叫優先佇列 是一棵完全二叉樹,它的特點是父節點的值大於 小於 兩個子節點的值 分別稱為大頂堆和小頂堆 它常用於管理演算法執行過程中的資訊,應用場景包括堆排序,優先佇列等。2.堆的基本操作 堆是一棵完全二叉樹,高度為o lg n 其基本操作至多與樹的高度成正比。在介紹堆的基本操作之前,...

Heap 資料結構之堆

堆是一種資料結構,是一棵二叉樹 盡量地滿足完全二叉樹的規律 他有乙個特點,就是兩個兒子的值均大於或小於父節點。那麼這個堆就被稱為大頂堆或小頂堆。同一級的元素不比較大小,它可以用到優先佇列之中,還有其他很神奇的應用。其實就是乙個步驟 如果它不滿足堆的性質,那麼就繼續維護,否則結束。1.向上維護 如果節...

資料結構 堆(heap)

堆 heap 也被稱為優先佇列 priority queue 佇列中允許的操作是先進先出 fifo 在隊尾插入元素,在隊頭取出元素。而堆也是一樣,在堆底插入元素,在堆頂取出元素,但是堆中元素的排列不是按照到來的先後順序,而是按照一定的優先順序排列的。這個優先順序可以是元素的大小或者其他規則。如圖一所...