void WalkTree(Node *P) {
if (P == NIL) return;
WalkTree(P->Left);
/* Здесь исследуем P->Data */
WalkTree(P->Right);
}
WalkTree(Root);
Чтобы получить отсортированный список узлов разделенного списка, достаточно
пройтись по ссылкам нулевого уровня. Вот так:
Node *P = List.Hdr->Forward[0];
while (P != NIL) {
/* Здесь исследуем P->Data */
P = P->Forward[0];
}
| метод | операторы | среднее время | время в худшем случае |
|---|---|---|---|
| хеш-таблицы | 26 | O(1) | O(n) |
| несбалансированные деревья | 41 | O(lg n) | O(n) |
| красно-черные деревья | 120 | O(lg n) | O(lg n) |
| разделенные списки | 55 | O(lg n) | O(n) |
| метод | вставка | поиск | удаление |
|---|---|---|---|
| хеш-таблицы | 18 | 8 | 10 |
| несбалансированные деревья | 37 | 17 | 26 |
| красно-черные деревья | 40 | 16 | 37 |
| разделенные списки | 48 | 31 | 35 |
| случайные
данные |
Кол-во элементов | хеш-таблицы | несбаланс. деревья | красно-черные деревья | слоёные списки |
|---|---|---|---|---|---|
| 16 | 4 | 3 | 2 | 5 | |
| 256 | 3 | 4 | 4 | 9 | |
| 4,096 | 3 | 7 | 6 | 12 | |
| 65,536 | 8 | 17 | 16 | 31 | |
| упорядоченные данные | 16 | 3 | 4 | 2 | 4 |
| 256 | 3 | 47 | 4 | 7 | |
| 4,096 | 3 | 1,033 | 6 | 11 | |
| 65,536 | 7 | 55,019 | 9 | 15 |