Priority queue: Difference between revisions

Content added Content deleted
(Added XLISP)
Line 275: Line 275:
h->nodes[1] = h->nodes[h->len];
h->nodes[1] = h->nodes[h->len];
int priority = h->nodes[1].priority;
h->len--;
h->len--;
Line 283: Line 282:
k = i;
k = i;
j = 2 * i;
j = 2 * i;
if (j <= h->len && h->nodes[j].priority < priority) {
if (j <= h->len && h->nodes[j].priority < h->nodes[k].priority) {
k = j;
k = j;
}
}
Line 292: Line 291:
break;
break;
}
}
node_t swap_tmp = h->nodes[i];
h->nodes[i] = h->nodes[k];
h->nodes[i] = h->nodes[k];
h->nodes[k] = swap_tmp ;
i = k;
i = k;
}
}
h->nodes[i] = h->nodes[h->len + 1];
return data;
return data;
}
}