資料結構 二叉堆

2021-10-02 14:46:21 字數 1350 閱讀 2714

二叉堆其實就是二叉樹,只不過二叉堆的最頂端的值,要麼最大,要麼最小,這要根據題意來定。

如圖:

讀者注意一下,圖上的黑字代表二叉堆的值,而紅色則代表下表。

二叉堆的基本操作:插入,刪除和查詢。

堆的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。堆的操作主要包括堆...