Heap 資料結構之堆

2021-07-23 13:16:02 字數 798 閱讀 1041

堆是一種資料結構,是一棵二叉樹(盡量地滿足完全二叉樹的規律)。他有乙個特點,就是兩個兒子的值均大於或小於父節點。那麼這個堆就被稱為大頂堆或小頂堆。同一級的元素不比較大小,它可以用到優先佇列之中,還有其他很神奇的應用。

其實就是乙個步驟:如果它不滿足堆的性質,那麼就繼續維護,否則結束。

1.向上維護

如果節點x與它的父親x/2的關係不合法,則x與x/2交換。

void

up(ll

x)

2.向下維護

如果節點x與它的兒子的關係不合法,則比較左兒子和右二子的大小,較大(或較小)的那個和x交換。

void down(ll x)

}

首先我們要將乙個陣列轉化成乙個堆。那麼我們對於陣列中的每乙個元素,都要維護堆的性質。

void build()

當我們要取最優值的時候,我們要將堆頂的元素刪掉,然後最後乙個元素到堆頂,維護堆。

void del(ll x)

else

}

ps:刪除操作可以應用到優先佇列之中

向堆中新增乙個元素到堆末,然後向上維護堆。

void ins(ll x)

堆時間複雜度:o(

nlog

n)堆多應用於優先佇列或者是堆排序。

堆是乙個重要的資料結構,在很多題目中容易遇到。

資料結構之堆Heap

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

資料結構之 堆(Heap)

堆 heap 是電腦科學中一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵完全二叉樹的陣列物件。同時堆是一種特殊的 佇列 既然說堆是完全二叉樹,那麼就得介紹下什麼是完全二叉樹 定義 若設二叉樹的高度為h,除第h層外,其它各層 1 h 1 的結點數都達到最大個數,且第h層所有的節點都連續集中在最左...

資料結構 堆(heap)

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