利用vector实现抽象小顶堆MinHeap类,设计出堆方法DeleteMin(Type E),入堆方法Insert(Type E),并能异常处理OutOfBounds
下面是利用vector实现抽象小顶堆MinHeap类的代码:
```cpp
#include <iostream>
#include <vector>
template<class Type>
class MinHeap {
private:
std::vector<Type> heap;
public:
MinHeap() = default;
void Insert(Type element) {
heap.push_back(element); // 将元素插入末尾
UpAdjust(heap.size() - 1); // 上浮调整
}
void DeleteMin() {
if (heap.empty()) {
throw std::out_of_range("Heap is empty."); // 抛出越界异常
}
std::swap(heap[0], heap[heap.size() - 1]); // 将最后一个元素与根节点交换
heap.pop_back(); // 删除最后一个元素
DownAdjust(0); // 下沉调整
}
private:
void UpAdjust(int child) {
int parent = (child - 1) / 2;
Type temp = heap[child];
while (child > 0 && temp < heap[parent]) {
heap[child] = heap[parent];
child = parent;
parent = (child - 1) / 2;
}
heap[child] = temp;
}
void DownAdjust(int parent) {
int child = parent * 2 + 1;
Type temp = heap[parent];
while (child < heap.size()) {
if (child + 1 < heap.size() && heap[child] > heap {
}
if (temp <= heap[child]) {
break;
}
heap[parent] = heap[child];
parent = child;
child = parent * 2 + 1;
}
heap[parent] = temp;
}
};
int main() {
MinHeap<int> minHeap;
try {
minHeap.DeleteMin(); // 抛出越界异常
} catch (std::out_of_range& e) {
std::cout << "Exception caught: " << e.what() << std::endl;
}
minHeap.Insert(4);
minHeap.Insert(8);
minHeap.Insert(3);
minHeap.Insert(2);
minHeap.Insert(1);
minHeap.DeleteMin();
minHeap.DeleteMin();
std::cout << "Heap elements after delete: ";
while (!minHeap.empty()) {
std::cout << minHeap.top() << " ";
minHeap.pop();
}
std::cout << std::endl;
return 0;
}
```
这里使用模板类`MinHeap`来实现小顶堆,底层采用`vector`来存储堆元素。`Insert`方法用于将元素插入堆中,并通过上浮调整维护堆的性质;`DeleteMin`方法用于删除堆顶元素,并通过下沉调整维护堆的性质。在`DeleteMin`方法中,如果堆为空,则抛出`std::out_of_range`越界异常。
你可以根据需要修改`Type`的数据类型,并在main函数中进行测试。
AI智能问答网
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。
点击这里>>使用创作工场,更聪明、更完整、更原创!