C 插入到偏序树中
我试图在偏序树中插入一个元素,但当我试图显示作为数组实现的树时,它不会显示元素 这里是堆结构。我只是把它简单化了C 插入到偏序树中,c,arrays,tree,C,Arrays,Tree,我试图在偏序树中插入一个元素,但当我试图显示作为数组实现的树时,它不会显示元素 这里是堆结构。我只是把它简单化了 typedef struct{ int Elem[SIZE]; int last; }Heap; 这是我为我的插入所做的 void insertHeap(Heap *HH, int given) { int parent, child, temp; if(HH->last < SIZE){ HH->Elem[HH-
typedef struct{
int Elem[SIZE];
int last;
}Heap;
这是我为我的插入所做的
void insertHeap(Heap *HH, int given)
{
int parent, child, temp;
if(HH->last < SIZE){
HH->Elem[HH->last] = given;
parent = (HH->last - 1) / 2;
for(child = HH->last ; child >= 0 && HH->Elem[child] <= HH->Elem[parent] ; child = parent, parent = parent - 1 / 2 ){
temp = HH->Elem[parent];
HH->Elem[parent] = HH->Elem[child];
HH->Elem[child] = temp;
}
HH->last++;
}
}
void insertHeap(堆*HH,给定int)
{
int父、子、临时;
如果(HH->last<大小){
HH->Elem[HH->last]=给定值;
父项=(HH->last-1)/2;
对于(child=HH->last;child>=0&&HH->Elem[child]Elem[parent];child=parent,parent=parent-1/2){
temp=HH->Elem[parent];
HH->Elem[parent]=HH->Elem[child];
HH->Elem[child]=临时;
}
HH->last++;
}
}
我刚刚更改了for循环的第一个条件语句child>0
您的代码进入无限循环。你应该解决两件事:
- 在循环控制的
更新部分中计算新父对象时,应在
周围加括号李>(父对象-1)
- 您的条件
将始终为真,因为即使对于parent>=0
,parent==0
也将产生0,因为根据C的整数除法规则(parent-1)/2
为零-1/2
- 您的条件
要不要上传你的
堆
结构定义?我不知道你还有什么问题,但是C中的整数除法并不像你想象的那样有效<整数算术中的code>1/2是零。@MichałSzydłowski刚刚上传了结构。parent-1/2
应该是(parent-1)/2
。你需要一个更好的条件来停止循环,可能是child>0
,因为项0没有父项。@Oehm谢谢,但我没有听到你的第一句话。我没有那种说法。
void insertHeap(Heap *HH, int given)
{
int parent, child, temp;
if(HH->last < SIZE){
HH->Elem[HH->last] = given;
parent = (HH->last - 1) / 2;
for (child = HH->last;
child > 0 && HH->Elem[child] <= HH->Elem[parent];
child = parent, parent = (parent - 1) / 2)
{
temp = HH->Elem[parent];
HH->Elem[parent] = HH->Elem[child];
HH->Elem[child] = temp;
}
HH->last++;
}
}
void insertHeap(Heap *HH, int given)
{
if(HH->last < SIZE){
int parent = (HH->last - 1) / 2;
int child = HH->last;
HH->Elem[HH->last] = given;
while (child > 0 && HH->Elem[child] <= HH->Elem[parent]) {
int temp = HH->Elem[parent];
HH->Elem[parent] = HH->Elem[child];
HH->Elem[child] = temp;
child = parent;
parent = (parent - 1) / 2;
}
HH->last++;
}
}