最小堆的建立 插入 與刪除

2022-08-29 05:00:13 字數 627 閱讀 2078

堆是完全二叉樹,完全二叉樹最大的特點就是 把資料儲存在陣列裡 通過父子結點的關係來做  不用實際建樹  parent=leftchild/2; leftchild=2*parent  右就加1這兒指的是序號關係,儲存的時候注意是利用樹的邏輯圖 從上到下 從左到右編號12345....。

建堆:實際是把資料先放入陣列(注意下標從1開始),對應邏輯圖,寫調整**,我的基本思路是從陣列末尾開始,對應元素與其父節點比較,滿足條件就換值,並且對被換的呼叫調整函式(要單獨寫個調整函式)因為被換的乙個是可能不滿足堆的要求的。然後乙個while迴圈這樣的操作一直做到第2個元素.乙個最小堆或最大堆就可以了

刪除操作:把陣列最後元素替換第乙個,把最後乙個賦個特殊值。然後呼叫調整函式就ok。這樣的好處是陣列中實際的元素保持連續的,方便操作,而且**簡單。

插入操作;同理和刪除差不多,把插入的數放在陣列最後(這種方法很好),呼叫調整函式。

調整函式:接收元素下標,判斷它的左兒子和右兒子(通過下標關係很好找)大小,把滿足條件的換上來,對被換的繼續呼叫調整函式遞迴直到被換的元素滿足條件,大於或小於左右兒子。細節注意陣列越界等問題。

乙個插入和刪除操作的時間約等於呼叫函式的時間複雜度,呼叫函式最多遞迴樹的高度次也就是logn(n個結點),那麼時間這三種操作的時間複雜度就是logn。

最大 小 堆的建立 插入與刪除

定義 最大堆 對於任意二叉樹節點,左右孩子節點的值都小於父親節點的值。即根節點的值最大 最小堆 同理 最大 小 堆的建立 接下來演示最小堆的建立,最大堆同理 堆的結構體如下 由結構體可以看出,該樹是由陣列來進行儲存樹 typedef struct node heap struct node 建立乙個...

最小堆建立

題目 實現最小堆兩個功能 1 增加乙個元素 2 輸出並刪除最小堆中的最小的數 輸入 第一行輸入乙個整數t,代表測試資料的組數。對於每組測試資料,第一行輸入乙個整數n,代表操作的次數。每次操作首先輸入乙個整數type。當type 1,增添操作,接著輸入乙個整數u,代表要插入的元素。當type 2,輸出...

最小堆怎麼建立

有乙個面試題,100w個數中找到最大的100個數。解決方式是,用乙個100個容量的最小堆,這100個數總數目前已知的最大的100個,而且 堆頂是小的,在繼續遍歷時候,只和堆定比較,如果這個數,比堆頂的大,就把這個數加入 這個堆。當遍歷完成後,這個最小堆中的數,就是最大的100個數了。當理解了這個,我...