- <
staticvoidinit(node_ptrthis_node);
>Эффекты: Построен неиспользуемый элемент списка, поставив следующий указатель на нуль:<NodeTraits::get_next(this_node) == node_ptr()
>
Сложность: Постоянная
Бросает: Ничего.
- <
staticboolunique(const_node_ptrthis_node);
>Требуется: Этот узел должен быть в круговом списке или быть пустым круговым списком.
Эффекты: Верно, что «это_узел» является единственным узлом кругового списка: или это не вставленный узел:<return node_ptr() == NodeTraits::get_next(this_node) || NodeTraits::get_next(this_node) == this_node
>
Сложность: Постоянная
Бросает: Ничего.
- <
staticboolinited(const_node_ptrthis_node);
>Эффекты: Верно, что "этот_узел" имеет то же состояние, как если бы он был введен с использованием "init(node_ptr)"
Сложность: Постоянная
Бросает: Ничего.
- <
staticvoidunlink_after(node_ptrprev_node);
>Требуется: Узел prev_node должен находиться в круговом списке или быть пустым круговым списком.
Эффекты: Отключает следующий узел prev_node из кругового списка.
Сложность: Постоянная
Бросает: Ничего.
- <
staticvoidunlink_after(node_ptrprev_node,node_ptrlast_node);
>Требуется: prev_node и last_node должны находиться в круговом списке или быть пустым круговым списком.
Эффекты: Отсоединяет диапазон (prev_node, last_node) от кругового списка.
Сложность: Константа
Бросает: Ничего.
- <
staticvoidlink_after(node_ptrprev_node,node_ptrthis_node);
>Требуется: prev_node должен быть узлом кругового списка.
Эффекты: Связывает этот_узл после prev_узла в круговом списке.
Сложность: Постоянная
Броски: Ничего.
- <
staticvoidtransfer_after(node_ptrp,node_ptrb,node_ptre);
>Требуется: b и e должны быть узлами одного и того же кругового списка или пустого диапазона. p должен быть узлом другого кругового списка.
Эффекты: Удаляет узлы из (b, e) диапазона от их кругового списка и вставляет их после p в круговой список p.
Сложность: Постоянная
Бросает: Ничего.
- <
staticvoidinit_header(constnode_ptr&this_node);
>Эффекты: Конструирует пустой список, делая этот узел единственным узлом кругового списка:<NodeTraits::get_next(this_node) == this_node
>.
Сложность: Константа
Бросает: Ничего.
- <
staticnode_ptr
get_previous_node(constnode_ptr&prev_init_node,constnode_ptr&this_node);
>Требуется: Этот_узл и prev_init_узл должны быть в одном и том же круговом списке.
Эффекты: Возвращает предыдущий узел этого_узла в круговой список начиная. Поиск по адресу prev_init_node. Первым узлом, проверенным на равенство, является NodeTraits::get_next (prev_init_node).
Сложность: Линейный к числу элементов между prev_init_node и этим_node.
Бросает: Ничего.
- <
staticnode_ptrget_previous_node(constnode_ptr&this_node);
>Требуется: Этот узел должен быть в круговом списке или быть пустым круговым списком.
Эффекты: Возвращает предыдущий узел этого_узла в круговой список.
Сложность: Линейный к числу элементов в круговом списке.
Бросает: Ничего.
- <
staticnode_ptrget_previous_previous_node(constnode_ptr&this_node);
>Требуется: Этот узел должен быть в круговом списке или быть пустым круговым списком.
Эффекты: Возвращает предыдущий узел предыдущего узла этого_узла в круговой список.
Сложность: Линейный по количеству элементов в круговом списке.
Бросает: Ничего.
- <
staticnode_ptr
get_previous_previous_node(node_ptrp,constnode_ptr&this_node);
>Требуется: Этот_узел и p должны быть в одном и том же круговом списке.
Эффекты: Возвращает предыдущий узел предыдущего узла этого_узла в начале кругового списка. Поиск по п. Первым узлом, проверенным на равенство, является NodeTraits::get_next((NodeTraits::get_next(p))).
Сложность: Линейный к числу элементов в круговом списке.
Бросает: Ничего.
- <
staticstd::size_tcount(constconst_node_ptr&this_node);
>Требуется: Этот узел должен быть в круговом списке или быть пустым круговым списком.
Эффекты: Возвращает количество узлов в круговой список. Если круговой список пуст, возвращает 1.
Сложность: Линейный
Бросает: Ничего.
- <
staticvoidunlink(constnode_ptr&this_node);
>Требуется: Этот_узел должен быть в круговом списке, быть пустым круговым списком или быть инитированным.
Эффекты: Развязывает узел из кругового списка.
Сложность: Линейный к числу элементов в круговом списке
Бросает: Ничего.
- <
staticvoidlink_before(constnode_ptr&nxt_node,constnode_ptr&this_node);
>Требуется: nxt_node должен быть узлом кругового списка.
Эффекты: Связывает этот_узл перед nxt_узлом в круговом списке.
Сложность: Линейный по количеству элементов в круговом списке.
Бросает: Ничего.
- <
staticvoidswap_nodes(constnode_ptr&this_node,
constnode_ptr&other_node);
>Требуется: Этот_узл и другой_узл должны быть узлами, вставленными в круглые списки или пустыми круглыми списками.
Эффекты: Изменяет положение узлов: этот_узл вставляется в положение других_узлов во втором круговом списке, а другой_узл вставляется в положение этого_узла в первом круговом списке.
Сложность: Линейное число элементов обоих списков
Бросок: Ничего.
- <
staticvoidreverse(constnode_ptr&p);
>Эффекты: Обратный порядок элементов в списке.
Бросок: Ничего.
Сложность: Эта функция является линейной по отношению к содержащимся элементам.
- <
staticnode_ptrmove_backwards(constnode_ptr&p,std::size_tn);
>Эффекты: Переносит узел p n позиций в конец списка.
Возвращается: Предыдущий узел p после функции, если было какое-либо движение, нуль, если n не приводит к движению.
Бросает: Ничего.
Сложность: Линейное число элементов плюс число перемещаемых позиций.
- <
staticnode_ptrmove_forward(constnode_ptr&p,std::size_tn);
>Эффекты: Перемещает узел p n позиций в начало списка.
Возвращение: Предыдущий узел p после функции, если было какое-либо движение, нуль, если n ведет, равен не движению.
Бросает: Ничего.
Сложность: Линейное число элементов плюс число перемещаемых позиций.