Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.05.25;
Скачать: CL | DM;

Вниз

Алгоритмы. Обход списка с удалением произвольных элементов   Найти похожие ветки 

 
atruhin ©   (2013-11-22 08:47) [0]

Вопрос по алгоритмам. Нужно реализовать список или аналогичную структуру для хранения указателей на процедуры.
Периодически нужно обходить список и вызывать некоторые из этих процедур. Проблема в том, что процедура в процессе работы, может удалить некоторые из элементов списка (включая свой) или добавить.
Пока вижу единственный вариант:
- создаем доп. список  удаленных
- основной список во время обхода блокируем
- запросы на удаление элементов переводим в добавление в доп. список
- на каждой итерации проверяем, этот доп. список
- в конце обхода производим физические удаление
Не очень нравятся доп. проверки на каждой итерации, громоздкость.
Вопрос: может есть более элегантное решение?


 
все арамисы, а я Дартаньян   (2013-11-22 08:50) [1]

если добавит перед собой, то твой алгоритм не сработает


 
Медвешоног Порожок   (2013-11-22 09:19) [2]

Периодически нужно обходить список и вызывать некоторые из этих процедур. Проблема в том, что процедура в процессе работы, может удалить некоторые из элементов списка (включая свой) или добавить.

И чего?
удаленные элементы в следующий цикл перебора не попадут
добавленные наоборот попадут.


 
Jeer ©   (2013-11-22 09:20) [3]

Помечай "галками"


 
RWolf ©   (2013-11-22 09:23) [4]

пусть процедуры не удаляют элементы, но помечают, как удалённые. Физическое удаление произведёт алгоритм обхода, когда элемент ему встретится в следующий раз.


 
DevilDevil ©   (2013-11-22 09:31) [5]

RWolf тему говорит
так - самый быстрый вариант


 
atruhin ©   (2013-11-22 09:33) [6]

>> RWolf ©   (22.11.13 09:23) [4]
Хм. А вот это хороший вариант, в любое время помечать, а собирать мусор при следующем проходе.
Спасибо. Думаю вопрос можно считать закрытым.

PS. Ведь нутром чувствовал, что где то должно быть простое и элегантное решение и не мог сообразить.


 
[ВладОшин] ©   (2013-11-22 09:49) [7]


> Jeer ©   (22.11.13 09:20) [3]
>
> Помечай "галками"

Это разве не тоже самое? :)


 
jumping jack   (2013-11-22 10:11) [8]

atruhin> или добавить
все арамисы, а я Дартаньян> если добавит перед собой, то твой алгоритм не сработает
+1
если процедура такая умная, пусть она итератором и работает (сама индекс инкрементирует и т.п.)


 
Jeer ©   (2013-11-22 11:36) [9]

>Это разве не тоже самое? :)

Разумеется:)

Но это как и в аниме: кто-то смотрит на статичные картинки и видит фильм, да еще и 3D, а кто-то - фигу.



Страницы: 1 вся ветка

Текущий архив: 2014.05.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.005 c
3-1298273047
Александр Т
2011-02-21 10:24
2014.05.25
Сгруппировать объединение...


15-1385038996
bodygans
2013-11-21 17:03
2014.05.25
ПАТЕН


15-1384896605
Юрий
2013-11-20 01:30
2014.05.25
С днем рождения ! 20 ноября 2013 среда


15-1384939416
Nil
2013-11-20 13:23
2014.05.25
Работа с SQLite


2-1375696096
Света
2013-08-05 13:48
2014.05.25
Точный таймер