Alvin Seville
342 / 272 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
1

Кольцевые списки

19.02.2018, 13:20. Показов 3084. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Зачем нужны кольцевые односвязные и двусвязные списки? Когда они могут понадобиться? Ведь, если цель задачи - просто сделать циклический набор данных, можно то же самое решить массивом и операцией индекс mod количество_элементов_в_массиве.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.02.2018, 13:20
Ответы с готовыми решениями:

Кольцевые списки
Здравствуйте, как реализовать удаление в кольцевом списке ? Читал, что можно сделать так, чтобы при...

Кольцевые списки
люди добрые, написал программу, теперь надо в ней сделать эти три списка в один кольцевой, но при...

Однонаправленные кольцевые списки
Помогите пожалуйста с кольцевыми списками!!! Нужно написать процедуру которая создает...

Двунаправленные кольцевые списки
Здравствуйте, уважаемые форумчане! Нужна помощь в доработке Двунаправленного кольцевого списка ...

10
Модератор
Эксперт функциональных языков программирования
3036 / 2179 / 457
Регистрация: 26.03.2015
Сообщений: 8,431
19.02.2018, 14:13 2
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Зачем нужны кольцевые односвязные и двусвязные списки?
Сначала ответьте на вопрос, зачем нужны односвязные и двусвязные списки.

Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
можно то же самое решить массивом
Односвязные и двусвязные списки нельзя заменить массивами и наоборот, так как операции с этими структурами занимают разное время.
0
Alvin Seville
342 / 272 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
19.02.2018, 15:01  [ТС] 3
Ну, я как понимаю, вообще связные списки нужны (односвязные и двусвязные) для тех операций, где требуется максимально быстрая вставка и удаление.
0
5656 / 4418 / 1409
Регистрация: 14.04.2014
Сообщений: 19,772
Записей в блоге: 20
19.02.2018, 15:14 4
Цитата Сообщение от Shamil1 Посмотреть сообщение
нельзя заменить массивами и наоборот
имхо, сильно зависит от обстоятельств
кольцевой список строк например легко заменится массивом
1
Модератор
Эксперт функциональных языков программирования
3036 / 2179 / 457
Регистрация: 26.03.2015
Сообщений: 8,431
19.02.2018, 17:31 5
Лучший ответ Сообщение было отмечено Volobuev Ilya как решение

Решение

Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Ну, я как понимаю, вообще связные списки нужны (односвязные и двусвязные) для тех операций, где требуется максимально быстрая вставка и удаление.
Правильно.

Есть некий набор операций, которые можно применять к контейнерам. У каждой операции есть амортизационная стоимость. Эта стоимость зависит от внутреннего устройства контейнера.

Например, Список (Вектор) может быть устроен по-разному. В его основе может быть массив, связный список, дерево и т.д. Мы выбираем реализацию в зависимости от того, какие операции (и как часто) нам нужно выполнять.
Например, если нам нужно вставлять элементы в середину списка, то лучше всего подойдёт связанный список (вставка O(1), обращение по индексу O(n)). Если нам нужно обращаться к элементам по индексу, то лучше всего подойдёт список на основе массива (вставка O(n), обращение по индексу O(1)). А если нам нужно и то, и другое, то лучше всего подойдёт список на основе дерева (вставка O(logn), обращение по индексу O(logn)).

Добавлено через 3 минуты
Цитата Сообщение от krapotkin Посмотреть сообщение
кольцевой список строк например легко заменится массивом
При этом стоимость вставки вырастет с O(1) до O(n).
1
5656 / 4418 / 1409
Регистрация: 14.04.2014
Сообщений: 19,772
Записей в блоге: 20
19.02.2018, 22:48 6
Цитата Сообщение от Shamil1 Посмотреть сообщение
вырастет с O(1) до O(n).
в общем виде - да. в конкретном кольце - ни на грамм
0
Модератор
Эксперт функциональных языков программирования
3036 / 2179 / 457
Регистрация: 26.03.2015
Сообщений: 8,431
19.02.2018, 23:51 7
Цитата Сообщение от krapotkin Посмотреть сообщение
в общем виде - да. в конкретном кольце - ни на грамм
Если в задаче необходимо вставлять в середину списка, то вырастет всегда - и в общем виде, и в конкретном кольце. А если в задаче не нужно вставлять в середину списка, то выбор связанного списка был ошибкой. А от типа элементов (строки или что-то другое) это вообще не зависит.
0
зомбяк
1582 / 1216 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
20.02.2018, 00:18 8
Цитата Сообщение от krapotkin Посмотреть сообщение
в конкретном кольце - ни на грамм
В кольце с постоянным числом элементов (т.е. когда вставка/удаление фактически невозможны, и возможна только замена элемента) и фиксированным/ограниченным сверху размером элемента.
0
5656 / 4418 / 1409
Регистрация: 14.04.2014
Сообщений: 19,772
Записей в блоге: 20
20.02.2018, 06:18 9
собсно это я и имел в виду
0
Модератор
Эксперт функциональных языков программирования
3036 / 2179 / 457
Регистрация: 26.03.2015
Сообщений: 8,431
20.02.2018, 09:20 10
Цитата Сообщение от TRam_ Посмотреть сообщение
т.е. когда вставка/удаление фактически невозможны, и возможна только замена элемента
А если в задаче не нужно вставлять в середину списка, то выбор связанного списка был ошибкой.
Мы выбираем реализацию в зависимости от того, какие операции (и как часто) нам нужно выполнять. И если мы изначально выбрали правильную реализацию, то мы уже не можем заменить (без потери производительности) связанный список на массив и наоборот.
0
0 / 0 / 0
Регистрация: 20.02.2018
Сообщений: 4
20.02.2018, 19:29 11
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
Зачем нужны кольцевые односвязные и двусвязные списки? Когда они могут понадобиться?
Пример из моей жизни -- в списке хранятся вершины многоугольника, которые мы обходим по кругу начиная с произвольной; иногда вставляем новые или удаляем.
0
20.02.2018, 19:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2018, 19:29
Помогаю со студенческими работами здесь

Кольцевые однонапрвленые списки
Привет, нужно написать програму, которая в кольцевом однонаправленом списке заменит все числа...

Кольцевые списки на базе двунаправленных списков
Всем привет! Помогите решить задачу: Пусть L обозначает кольцевой двунаправленный список с...

Отображение и кольцевые списки. Ошибка дизайна в функции отображения в Python 2.x
Common Lisp Известно, что списки могут быть кольцевыми, т.е. cdr последней ячейки списка может...

Кольцевые гонки
Ребят, помогите, пожалуйста, решить задачу... Идей пока вообще нет, даже не знаю как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru