数据结构堆的删除
Posted muyefeiwu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构堆的删除相关的知识,希望对你有一定的参考价值。
题目
实现在最小堆中删除给定序号为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 <class E>bool MinHeap <E>::Remove(int &pos,E &x)
{
if (!currentSize) { //堆空, 返回false
cout << "Heap empty" << endl;
return false;
}
x = heap[pos]; // 返回该元素
heap[pos] = heap[currentSize - 1]; //最后元素填补到pos结点
currentSize--;
siftDown(pos, currentSize - 1);//自上向下调整为堆
siftUp(pos);
return true;
}
以上是关于数据结构堆的删除的主要内容,如果未能解决你的问题,请参考以下文章