資料結構 堆的刪除

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

實現在最小堆中刪除給定序號為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;

}