Изменения

Перейти к: навигация, поиск

Список с пропусками

1793 байта добавлено, 11:08, 24 марта 2019
Вставка элемента
===Вставка элемента===
Добавить элемент Алгоритм вставки элементов в список можно следующим образомс пропусками состоит из следующих шагов:# Начинаем вставку в на самом верхнем уровне# На каждом уровне находим место, куда надо вставить Пока следующих элементследующего элемента меньше ключа <tex>-</tex> идём по списку вправо.# Если мы на первом уровне <tex>-</tex> вставляем элемент . Иначе спускаемся ниже и кидаем монетувозвращаемся к шагу <tex>2</tex>. Если # Кидаем монетку и если выпал «Орёл», то возвращаем ссылку на только что вставленный текущий элемент, иначе возвращаем <tex>-</tex> ''null''# . Если мы были не на первом уровне, то вызываем рекурсивно функцию от нижнего уровня, и если нам вернулась ссылка на элемент вернули ''null'' <tex>-</tex> вставляем возвращаем его без броска монетки. Отдельно стоит обработать случай, когда вставка нового элемента увеличивает число уровней. Тогда необходимо создать ещё один отсортированный список, в котором будет всего один текущий элемент, и не забыть присвоить списку с пропусками новую ссылку на текущем уровне и снова кидаем монетуверхний уровень. Будем считать, что вставка каждого нового элемента увеличивает число уровней не более, иначе просто возвращаем ''null''чем на один.
====Псевдокод====
Функция <tex>\mathtt{insert}</tex> возвращаем ссылку на вставленный элемент в списке, в котором находится <tex>\mathtt{res}</tex>, или ''null'', если на монете выпал не «Орёл».
 
'''node''' insert ('''node''' res, '''K''' key)
'''while''' res.next <tex>\neq</tex> ''null'' '''and''' res.next.next <tex>\neq</tex> ''null''
res = res.next
'''if''' res.down = ''null''
res.next = node(key, ''null'', res.next)
'''if''' random(0, 1) > 0.5
'''return''' res.next
'''return''' ''null''
node i = insert(res.down, key)
'''if''' i <tex>\neq</tex> ''null''
res.next = node(key, i, res.next)
'''if''' random(0, 1) > 0.5
'''return''' res.next
'''return''' ''null''
'''return''' ''null''
 
Для того, чтобы вставить элемент с ключом <tex>\mathtt{key}</tex> в список с пропусками <tex>\mathtt{skip}</tex> необходимо вызвать следующую функцию
===Удаление элемента===
390
правок

Навигация