Очередь приоритетов реализована в виде кучи, где все дочерние элементы для определенного узла имеют более низкий приоритет, чем его родительский элемент, но не обязательно его дочерние элементы.
Элементы хранятся в массиве (я подозреваю) следующим образом:
Для каждого узла дочерние элементы хранятся в 2 * pos и 2 * pos + 1. Таким образом, для [1, 2, 9, 6, 3]:
element 1 (value 1), children are 2 and 9.
element 2 (value 2), children are 6 and 3
element 3 (value 9), 4 (value 6) and 5 (value 3) have no children...
При удалении из очереди родительский узел заменяется одним из дочерних элементов с наивысшим приоритетом, который снова заменяется одним из его дочерних элементов и т. Д. (Операция очень оптимальная, работает только O (log n) время) Например:
[1, 2, 9, 6, 3]
[2, 9, 6, 3]
[3, 9, 6]
[6, 9]
[6]
Список очень сильно отсортирован, он только в куче, что не так заметно при печати нашего списка.