d - 1]));
181 //如果e元素不大于最小的孩子元素,没有必要再继续,hole_index就是他的位置
182 if(!(min_heap_elem_greater(e, s->p[min_child])))
183 break;
184 //将小的孩子元素放到hole_index位置上
185 (s->p[hole_index] = s->p[min_child])->min_heap_idx = hole_index;
186 //hole_index保存当前小的孩子索引
187 hole_index = min_child;
188 //当前小的孩子位置空出,继续下一次循环,比较当前小的孩子的左右孩子
189 min_child = 2 * (hole_index + 1);
190 }
191 //将e元素放到hole_index,然后向上调整。一般e元素是取最下层最右节点。不排除有可能比现在的位置上的父节点下
192 //所以需要向上调整
193 min_heap_shift_up_(s, hole_index, e);
194 }
195
196 #endif /* _MIN_HEAP_H_ */
|