在C ++中动态创建堆

时间:2014-06-12 10:51:44

标签: c++ algorithm heap

我将堆实现为数据结构时遇到了问题。我的任务是创建最初未知数量的堆,这些堆也是最初未知的尺寸,我以后可以使用这些尺寸。二进制堆的数量及其大小将作为参数(一些stdin数据)给出,因此for循环应该是合适的。另外,我必须尽可能少面向对象,因为它是算法类问题的一部分...

然而,我不知道从哪里开始,因为我不知道如何引用它们(通过名字?)以及如何存储它们,所以我将非常感激你们的任何帮助。

提前谢谢你!

3 个答案:

答案 0 :(得分:0)

  

我不知道从哪里开始,因为我不知道如何引用它们(通过名字?)以及如何存储它们,所以我会非常感激任何帮助来自You Guys。

考虑为堆创建一个类(通过堆我的意思是二进制堆)。您应该将此类设置为半常规类型(可复制,可移动,同等可比)。然后,将您的类的n个实例存储在std :: vector中。

答案 1 :(得分:0)

  

我不知道如何引用它们(通过名字?)

您可以拥有一系列堆,并按索引引用它们

  

以及如何存储它们

堆存储为平面数据。索引为i的节点的子节点是索引为2*i2*i+1

的节点

答案 2 :(得分:0)

使用类似

的内容
struct Heap
{  
int *arr;
int count;  //number of elements in heap
int capacity;  //size of heap;
int heap_type;  //min(0) or max(1)
};

然后您可以定义堆,使用new / malloc动态分配它并初始化所有四个成员。

注意:您必须为堆执行两次动态分配,对阵列arr执行其他动态分配。