資料結構 堆的刪除

2022-08-05 17:27:20 字數 680 閱讀 2740

實現在最小堆中刪除給定序號為pos的元素,並由x返回,刪除成功返回true,失敗返回false。(注意:刪除後要保持資料結構是最小堆。)

在最小堆中刪除給定序號為pos的元素,我們可以先刪除該元素後將堆中最後乙個元素補到該位子,然後向下調整為堆,在從該位置向上調整為堆。

1 如果堆空返回false

2 x = heap[pos]; // 返回元素

3 heap[pos] = heap[currentsize - 1]; //最後元素填補到pos結點

4 currentsize--;

5 siftdown(pos, currentsize - 1);//自上向下調整為堆

6 siftup(pos); //向上調整為堆

時間複雜度為o(logn)

template bool minheap ::remove(int &pos,e &x) 

x = heap[pos]; // 返回該元素

heap[pos] = heap[currentsize - 1]; //最後元素填補到pos結點

currentsize--;

siftdown(pos, currentsize - 1);//自上向下調整為堆

siftup(pos);

return true;

}

資料結構 堆的常規操作(建堆,刪除,插入)

寫在前面 該篇文章 柳婼 資料結構 堆 堆排序筆記 堆的一些性質 堆是一棵完全二叉樹,樹的每個結點的值都不小於 或者不大於 其左右孩子的值。父親結點大於等於孩子結點的值叫做大頂堆,反之叫做小頂堆 大頂堆的每個結點的值都是以它為根結點的子樹的最大值,反之最小值 下面都以大頂堆為例子 兩個兄弟之間不存在...

資料結構 堆的建立,銷毀,插入,刪除

堆在物理意義上是乙個陣列。堆在邏輯意義上是乙個完全二叉樹 大堆 父 子 小堆 父 子 宣告堆的一些基本函式 介面 你別忘了測試單元!define crt secure no warnings 1 pragma once include include include typedef int hpda...

資料結構 堆(建立,插入,刪除,排序)

關於二次總結是否有必要,我覺得是有的,參考學習別人的知識,內化的過程是一次總結的過程。每次參考同乙個人的思維軌跡,確實能培養思維。該篇筆記整理理由 在pat advanced level的heap path一題,參考了關於堆的正序遍歷的映象。於是參考一下堆相關筆記。void createheap v...