堆(Heap)是一種特殊的完全二叉樹結構,它滿足特定的性質,使得每個節點都滿足堆序的性質,即父節點的值大於或等於(最大堆)或小於或等於(最小堆)其子節點的值。
堆在計算機科學中有著廣泛的套用,如優先權佇列、排序算法(例如堆排序)等。堆的實現通常使用數組而不是鍊表,這是因為對於完全二叉樹來說,數組可以更有效地表示節點之間的關係。在數組中,節點的索引可以表示其在堆中的位置和層級,例如,節點的左孩子節點索引為2i+1,右孩子節點索引為2i+2,父節點索引為(i-1)/2。
堆的主要操作包括插入新元素和刪除元素(例如,提取最大堆中的最大值或最小堆中的最小值)。插入新元素時,需要將其放置在數組的末尾,然後通過向上調整的過程確保堆的性質得到維護。刪除元素時,通常刪除根節點並將最後一個元素移到根節點的位置,然後通過向下調整的過程維護堆的性質。
在程式語言中,如Python的heapq庫和Java的優先佇列,都提供了堆的基本操作,使得開發者可以方便地使用堆數據結構。