Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Софт
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2011, 06:52   #1
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию Двунаправленный связный список

Возникла необходмость создать список. TList не подходил для решения этой задачи, так как нужен механизм быстрой вставки и удаления элементов. Вот создаю двунаправленный связный список. Пока на паскале, потом уже на basm буду перебивать.
Может кто глянет и чего скажет
SibListExample.zip
Вот еще делал для себя маленькую программу сравнения с TList.
SibList vs List.zip
Не смотря на громкое название прошу не судить строго. Сам всё понимаю. Особенно прошу не обращать внимания на сортировку, она покамисть сделана топорно, шобы было, так сказать.

З.Ы.: Ну и конечно же, СОРИ за отсутствие коментов. Если что спрашивайте. А то писать коменты в коде, который потом может почти полностью измениться чего-то не хочется.
Sibedir вне форума Ответить с цитированием
Старый 19.04.2011, 20:22   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Вы не указали, как это будет применяться. Может таких проблем и не возникнет, но все-таки: На получится так, что поиск элемента, перед которым нужно вставить, не съест все преимущества быстрой вставки ?

Может все-таки лучше сбалансированное дерево, а не список ? А внешне оформить его как список. Вот неплохой вариант с O(log N)
alexBlack вне форума Ответить с цитированием
Старый 20.04.2011, 05:43   #3
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
поиск элемента, перед которым нужно вставить, съест все преимущества быстрой вставки
В некоторых случаях, кстати, так и будет. А вообще использовать список предполагается по принципу БД. Т.е. у меня всегда будет выбран текущий элемент и от него я и буду плясать. Например (опять же графика) есть набор линий. Каждая линия имеет координаты собственного центра (Xc, Yc, Zc). X и Y соответствуют координатам на экране, а Z - это глубина. Список отсортирован по Z. Если изменить Z одной из линий, то она должна стать на нескольно линий глубже или выше. Для этого используются Prev и Next.
Другой вариант. Необходимо в список с координатами Z = (2 3 5 9 10 15 21) добавить другой список (8 11 20). Вот как это я собираюсь делать (подчеркнут текущий элемент):
Код:
Список 1                           Список 2
(2 3 5 9 10 15 21)                 (8 11 20)
(2 3 5 9 10 15 21)                 (8 11 20)
(2 3 5 9 10 15 21)                 (8 11 20)
(2 3 5 8 9 10 15 21)               (20)
(2 3 5 8 9 11 10 15 21)            (20)
(2 3 5 8 9 11 10 15 21)            (20)
(2 3 5 8 9 11 10 15 20 21)         nil
Цитата:
Может все-таки лучше сбалансированное дерево
Спасибо. Не знал таких. Постараюсь разобраться.

Вообще, очень много проблем оказалось связано с First И Last. Мне нужно знать начало и конец списка, но почти при каждой операции приходится тратить на них дополнительные ресурсы.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Связный список С++ Шёпот Общие вопросы C/C++ 2 01.04.2011 22:56
Связный список векторов Kekcuk Общие вопросы C/C++ 0 13.12.2010 21:00
Циклический связный список Micar Общие вопросы C/C++ 1 08.06.2010 20:28
Инвертировать связный список levandowskiy Общие вопросы C/C++ 2 21.08.2009 15:20
Как заполнить связный список? levandowskiy Общие вопросы C/C++ 1 18.08.2009 09:00