二叉堆其實就是二叉樹,只不過二叉堆的最頂端的值,要麼最大,要麼最小,這要根據題意來定。
如圖:
讀者注意一下,圖上的黑字代表二叉堆的值,而紅色則代表下表。
二叉堆的基本操作:插入,刪除和查詢。
堆的stl實現
本人不太懂,就參考這位大佬的:
上圖中,q.top 就是查詢,q.pop 就是刪除,q.push 就是插入。
下面分享一下這三個操作怎麼用**實現。
int data[
10010];
//data陣列模擬二叉堆,用來存放資料
int end =0;
//堆中的個數
void
swap
(int
*a,int
*b)
這是初始化,下面通用。
這個賊簡單,就把最頂端那個取出來就可以了。
int
top(
)
emmm,那來看看**吧!
void
push
(int x)
else
break
; now = temp;
//將父域變成子域
}return
;}
這裡我再解釋一下:
看圖,0為我要插入的值,其他的資料是堆原有的值,並且都標了下標**(紅色的字是下標)**
0作為插入的值,就先到對尾去,下標為10。然後找父域,就是找下標為5的那個。
emmm,注意到沒,10 -> 5 ->2 ->1 。這就是這條語句的意思,即當前層的某乙個下標為n,
那個他的上層父域為 n>>1 (n/2)。下一層子域為 n<<1 (n*2)。
void
pop()if
(data[now]
> data[temp]
)else
break
; now = temp;
//將子域變成父域
}return
;}
資料結構 二叉堆
二叉堆一般用來實現優先佇列 優先佇列是一種至少允許以下兩種操作的資料結構 insert 以及 deletemin 同查詢樹一樣,二叉堆具有結構性與堆序性,對二叉堆的基本操作可能會破壞這些性質,所以二叉堆的操作要直到其基本性質滿足才能結束。一 結構性 二叉堆在結構上為完全二叉樹,其具有完全二叉樹的結構...
資料結構 二叉堆
二叉堆 優先佇列 具有結構性和堆序性 結構性為 二叉堆是一棵完全被填滿的二叉樹,有可能的例外是在底層,底層上的元素從左到右填入。這樣的樹稱為完全二叉樹。二叉堆可以用陣列表示,對於陣列中任意位置i上的元素,其左兒子在位置2i上,右兒子在位置2i 1上,父親則在i 2上 小於i 2的最小整數 堆序性為 ...
資料結構之(二叉)堆
二叉 堆是乙個陣列,是一顆近似完全二叉樹,分為大頂堆 小頂堆。表示堆的陣列a有兩個屬性 1 a.length表示陣列元素的個數 2 a.heap size表示有多少個堆元素儲存在陣列a中。更多的關於堆的性質的介紹 演算法導論第三版 p85 p89 程式設計珠璣 p141 p145。堆的操作主要包括堆...