堆(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 在隊尾插入元素,在隊頭取出元素。而堆也是一樣,在堆底插入元素,在堆頂取出元素,但是堆中元素的排列不是按照到來的先後順序,而是按照一定的優先順序排列的。這個優先順序可以是元素的大小或者其他規則。如圖一所...