Alvin Seville
|
|
1 | |
Кольцевые списки19.02.2018, 13:20. Показов 3084. Ответов 10
Метки нет Все метки)
(
Зачем нужны кольцевые односвязные и двусвязные списки? Когда они могут понадобиться? Ведь, если цель задачи - просто сделать циклический набор данных, можно то же самое решить массивом и операцией индекс mod количество_элементов_в_массиве.
0
|
|
19.02.2018, 13:20 | |
Ответы с готовыми решениями:
10
Кольцевые списки Кольцевые списки
Двунаправленные кольцевые списки |
Модератор
![]() 3036 / 2179 / 457
Регистрация: 26.03.2015
Сообщений: 8,431
|
|
19.02.2018, 14:13 | 2 |
Сначала ответьте на вопрос, зачем нужны односвязные и двусвязные списки.
Односвязные и двусвязные списки нельзя заменить массивами и наоборот, так как операции с этими структурами занимают разное время.
0
|
Модератор
![]() 3036 / 2179 / 457
Регистрация: 26.03.2015
Сообщений: 8,431
|
|
19.02.2018, 17:31 | 5 |
![]() Решение
Правильно.
Есть некий набор операций, которые можно применять к контейнерам. У каждой операции есть амортизационная стоимость. Эта стоимость зависит от внутреннего устройства контейнера. Например, Список (Вектор) может быть устроен по-разному. В его основе может быть массив, связный список, дерево и т.д. Мы выбираем реализацию в зависимости от того, какие операции (и как часто) нам нужно выполнять. Например, если нам нужно вставлять элементы в середину списка, то лучше всего подойдёт связанный список (вставка O(1), обращение по индексу O(n)). Если нам нужно обращаться к элементам по индексу, то лучше всего подойдёт список на основе массива (вставка O(n), обращение по индексу O(1)). А если нам нужно и то, и другое, то лучше всего подойдёт список на основе дерева (вставка O(logn), обращение по индексу O(logn)). Добавлено через 3 минуты При этом стоимость вставки вырастет с O(1) до O(n).
1
|
Модератор
![]() 3036 / 2179 / 457
Регистрация: 26.03.2015
Сообщений: 8,431
|
|
19.02.2018, 23:51 | 7 |
Если в задаче необходимо вставлять в середину списка, то вырастет всегда - и в общем виде, и в конкретном кольце. А если в задаче не нужно вставлять в середину списка, то выбор связанного списка был ошибкой. А от типа элементов (строки или что-то другое) это вообще не зависит.
0
|
зомбяк
1582 / 1216 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
20.02.2018, 00:18 | 8 |
В кольце с постоянным числом элементов (т.е. когда вставка/удаление фактически невозможны, и возможна только замена элемента) и фиксированным/ограниченным сверху размером элемента.
0
|
Модератор
![]() 3036 / 2179 / 457
Регистрация: 26.03.2015
Сообщений: 8,431
|
|
20.02.2018, 09:20 | 10 |
А если в задаче не нужно вставлять в середину списка, то выбор связанного списка был ошибкой.
Мы выбираем реализацию в зависимости от того, какие операции (и как часто) нам нужно выполнять. И если мы изначально выбрали правильную реализацию, то мы уже не можем заменить (без потери производительности) связанный список на массив и наоборот.
0
|
0 / 0 / 0
Регистрация: 20.02.2018
Сообщений: 4
|
|
20.02.2018, 19:29 | 11 |
Пример из моей жизни -- в списке хранятся вершины многоугольника, которые мы обходим по кругу начиная с произвольной; иногда вставляем новые или удаляем.
0
|
20.02.2018, 19:29 | |
20.02.2018, 19:29 | |
Помогаю со студенческими работами здесь
11
Кольцевые однонапрвленые списки Кольцевые списки на базе двунаправленных списков
Кольцевые гонки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |