我必须为二进制堆树编写代码,而且我坚持将新元素添加到数组中。打印功能返回的地址,我猜不存在的数组。我不能使用向量。它必须是动态数组。这是我的作业。
void swap(int heap[], int i, int j)
{
int temp;
temp=heap[i];
heap[i]=heap[j];
heap[j]=temp;
}
void bubbleUp (int heap[], int i)
{
if (i>1 && heap[i] > heap[i/2])
{
swap(heap,i,i/2);
bubbleUp(heap,i/2);
}
}
void add (int heap[], int value, int size)
{
if (size==1)
{
heap[size]=value;
}
else
{
int newSize=size++;
int *temp = new int[newSize];
for (int i=1; i<newSize-1; i++)
temp[i]=heap[i];
delete [] heap;
temp[newSize-1]=value;
int *heap = new int[newSize];
for (int i=1; i<newSize; i++)
heap[i]=temp[i];
heap=temp;
delete [] temp;
bubbleUp(heap,newSize);
}
}
我正在尝试使用更大的临时动态数组来帮助自己,然后将参数传递给我的主数组。我在做什么错了?
void printHeap (int heap[], int size)
{
for (int i=1; i<size; i++)
cout<<heap[i]<<" ";
}
int main()
{
int var, value=0, size=1;
int *heap = new int[size];
while (true)
{
cin>>var;
if (var==0) //add
{
cin>>value;
add(heap,value,size);
size++;
}
if (var==2) //print
{
printHeap(heap,size);
}
else if (var==-1) //exit
{
return 0;
}
}
}