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

Вниз

Связные списки   Найти похожие ветки 

 
Redwwq   (2007-03-18 15:36) [0]

Чем отличается односвязный список от двусвязного?


 
Eraser ©   (2007-03-18 15:38) [1]


> Redwwq   (18.03.07 15:36) 

тем что в первом одна связь, а во втором - две :)


 
xayam ©   (2007-03-18 15:44) [2]


> Eraser ©   (18.03.07 15:38) [1]
> > Redwwq   (18.03.07 15:36)
> тем что в первом одна связь, а во втором - две :)

железная логика ))


 
vuk ©   (2007-03-18 15:54) [3]

У элемента односвязного списка есть только ссылка на следующий за ним элемент. У элемента двусвязного - на следующий и предыдущий. В результате по односвязному можно перемещаться только в одну сторону, а по двусвязному - в обе. Вставка/удаление на двусвязных списках работает быстрее.


 
Anatoly Podgoretsky ©   (2007-03-18 15:59) [4]

> vuk  (18.03.2007 15:54:03)  [3]

> Вставка/удаление на двусвязных списках работает быстрее.

Я бы не сказал, в двухсвязном списке надо поправить две ссылки, вместо одной.


 
vuk ©   (2007-03-18 16:01) [5]

to Anatoly Podgoretsky ©   (18.03.07 15:59) [4]:
>Я бы не сказал, в двухсвязном списке надо поправить две ссылки, вместо
>одной.
При этом предыдущий элемент (ссылку в котором тоже надо поправить) находится только перебором от начала списка. В отличие от.


 
Anatoly Podgoretsky ©   (2007-03-18 16:07) [6]

> vuk  (18.03.2007 16:01:05)  [5]

Эта ссылка будет получена при поиске текущего элемента.


 
vuk ©   (2007-03-18 16:17) [7]

to Anatoly Podgoretsky ©   (18.03.07 16:07) [6]:
>Эта ссылка будет получена при поиске текущего элемента.
Зависит от того, в какую ситуацию попадем. Может и не быть этой ссылки в каком-то конкретном случае. Если рассматривать ситуацию, когда есть элемент списка который нам нужно вставить и место, куда его нужно вставить заданное другим элементом списка, то для односвязных списков операции "вставить элемент после" и "вставить элемент до" сильно отличаются, т.к. в одном из случаев необходим перебор для поиска. С удалением ровно та же история.


 
Anatoly Podgoretsky ©   (2007-03-18 16:28) [8]

> vuk  (18.03.2007 16:17:07)  [7]

Если сохраненая ссылка, то конечно так


 
isasa ©   (2007-03-18 16:50) [9]

Односвязный прелестен тем, что нужно как зеницу ока хранить Root, иначе при его потере будет весело. :)


 
antonn ©   (2007-03-18 16:51) [10]

isasa ©   (18.03.07 16:50) [9]
тоже самое касается под-рут, только не так интересно:)


 
default ©   (2007-03-18 16:58) [11]

isasa ©   (18.03.07 16:50) [9]
а разве плохо когда весело?:)


 
isasa ©   (2007-03-18 17:04) [12]

default ©   (18.03.07 16:58) [11]
а разве плохо когда весело?:)


А кто-ж спорит? :)


 
clickmaker ©   (2007-03-18 17:09) [13]


> нужно как зеницу ока хранить Root

root всегда надо хранить. Чтобы в него зрить (зреть?) периодически


 
isasa ©   (2007-03-18 17:12) [14]

clickmaker ©   (18.03.07 17:09) [13]

Это был намек? Или как ... ?  :)


 
Ант   (2007-03-18 20:04) [15]

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

Поправьте если не прав


 
Eraser ©   (2007-03-18 20:08) [16]


> Ант   (18.03.07 20:04) [15]

думаю почти в каждом серьезном проекте найдется задача, для решения которой приходится вплотную сталкиваться с какой-либо классической структурой данных.


 
default ©   (2007-03-18 20:55) [17]

Eraser ©   (18.03.07 20:08) [16]
во второй фремворк внесли класс двусвязного списка
видно кому-то он таки нужен:)


 
Ант   (2007-03-18 21:01) [18]


> Eraser ©  
</I
> default ©  

>

Давайте конкретику, хорошо?  :-)


 
vuk ©   (2007-03-18 21:05) [19]

to Ант   (18.03.07 20:04) [15]:
>не представвляю ситуации, когда на практике понадобится односвязный
>(двухсвязный) список.
У массивов (а TList это внутри всё-таки массив) эффективность операций добавления/удаления сильно ниже, чем у списков и ещё зависит от количества злементов. Вот и получается - для случаев с активной вставкой-удалением элементов списки использовать лучше, чем TList и иже с ними.

С другой стороны списочные структуры неэффективны там, где нужен индексный доступ и для них нужны дополнительные затраты памяти для организации связей.


 
cyborg ©   (2007-03-18 21:08) [20]

> [15] Ант   (18.03.07 20:04)

Я, вот, не представляю как без них можно делать.


 
isasa ©   (2007-03-18 21:15) [21]

Ну это "третий" компонент, но TdxDBTreeView из Dev. Express, чем не список.


 
vuk ©   (2007-03-18 21:16) [22]

to isasa ©   (18.03.07 21:15) [21]:
>но TdxDBTreeView из Dev. Express, чем не список.
Ничем. Потому, что он дерево. :)


 
isasa ©   (2007-03-18 21:20) [23]

Принцип тот же ... Остальное нюансы. :)


 
vuk ©   (2007-03-18 21:35) [24]

to isasa ©   (18.03.07 21:20) [23]:
>Принцип тот же ... Остальное нюансы. :)
Ну... Не зная того, как устроен внутри элемент дерева в TTreeView я не брался бы утверждать, что там именно списочные структуры внутри используются. А как оно там у MS реализовано - фиг их знает.

А вот если взять TdxTreeList тех же DevExpress (и соответственно QuantumGrid до 4-й версии), то там подэлементы в узле дерева в TList хранятся.


 
Ант   (2007-03-18 22:27) [25]

Мне кажется, времена печения о быстродействии программы при работе с оперативкой до такой степени, остались в прощлом

ну пробегитесь миллион раз по списку первым и вторым способом - и разница составит сотые доли секунды

это то же самое, как всю неделю соблюдать диету, и не кушать ни капли жира, дозировать углеводы, сверяться по таблицам
а потом в субботу пойти поиграть с мужиками во двор в футбол, а потом выпить литров пять пива


 
DVM ©   (2007-03-18 22:33) [26]


> Мне кажется, времена печения о быстродействии программы
> при работе с оперативкой до такой степени, остались в прощлом

времена всегда одинаковые, задачи стали объемнее, и где раньше был миллион, теперь миллиард.


 
vuk ©   (2007-03-18 22:43) [27]

Блин. А потом сидим и удивляеся, почему все тормозное такое... :(


 
Ант   (2007-03-18 23:06) [28]

Ну вот честное пионерское, ни разу ни одна реальная программа не тормозила потому, что работала с массивом вместо связного списка.
А вот за счет бардачной организации доступа к БД - постоянно


 
@!!ex ©   (2007-03-18 23:19) [29]

> [28] Ант   (18.03.07 23:06)

Вы показываете мнение человека, никогда не писавшего приложения с критичной скорости работы(судя по тому, что не считаете сотые доли большим числом... Иногда приходится воевать из-за тысячных) и вообще никогда не учавствовали в больших серьезных проектах не ограничивающихся выборкой из БД(судя по тому, что не знаете куда применить классические вещи, теже списки)...
В этом проблема дельфи(это не лично к вам, это ), натыкали компонетов, работает - и замечательно.
Реально есть куда прикрутить даже конечный автоматы. ;)
P.S>
Тут не далеко обсуждали эффективность использования двусвязных(помоему) список для хранения текстурных объектов.
Кстати, TList по моему тоже список двусвязный.


 
vuk ©   (2007-03-18 23:25) [30]

to @!!ex ©   (18.03.07 23:19) [29]:
>Кстати, TList по моему тоже список двусвязный.
Массив он. В чистом виде. Исходники смотрите.


 
Ант   (2007-03-18 23:27) [31]


> @!!ex ©  


Пафоса много, а конкретики опять ноль.
Я вас слушаю.


 
Ант   (2007-03-18 23:31) [32]


> что не считаете сотые доли большим числом.


Я имел в виду - на всю операцию, на весь массив (список)


 
@!!ex ©   (2007-03-18 23:32) [33]

> Массив он. В чистом виде. Исходники смотрите.

Ну скажем не в чисто.. Всетаки массив указателей, а не чистый массив...
Но вообще вы правы, перепутал с Сишными.


> [31] Ант   (18.03.07 23:27)

Вам нужна конкретика по использованию Списоков? Я уже сказал. Храниение текстур.
Да вообще любых динамических данных. Системы частиц,  динамические объекты создаваемые в процессе обработки сцены.
В свое время был придуман другой способ работы с дампом данных, но требующий больше памяти. Но насколько мне известно, не очень распространенный метод... Я его приводил, опять же в конференции "Игры".
Списки остаются самым распространенным способом хранения динамических данных, где элементы часто удаляются из любой части списка.


 
vuk ©   (2007-03-18 23:37) [34]

to @!!ex ©   (18.03.07 23:32) [33]:
>Ну скажем не в чисто.. Всетаки массив указателей, а не чистый массив...
А как это называть? Если контейнер для указателей хранит их в массиве указателей, это не массив в чистом виде? :)


 
@!!ex ©   (2007-03-18 23:39) [35]

>
>
> [34] vuk ©   (18.03.07 23:37)

Это массив указателей в чистом виде. ;)


 
Ант   (2007-03-18 23:45) [36]


> @!!ex ©

Хорошо, ответ на вопрос
"а где их реально необходимо пременять"
получил ответ
"в играх"
спасибо


 
Ант   (2007-03-18 23:46) [37]

блин...
применять конечно же


 
@!!ex ©   (2007-03-18 23:48) [38]

> [36] Ант   (18.03.07 23:45)

Игры - единственное место, где используются динамических структуры?
Я говорю об играх. потому как именно там я их и использую, но это же не единственное место. :)


 
Zeqfreed ©   (2007-03-18 23:54) [39]

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


 
Anatoly Podgoretsky ©   (2007-03-18 23:56) [40]

> Zeqfreed  (18.03.2007 23:54:39)  [39]

Неудачный пример.
Эта задача также мгновенно решается и с помощью массива.



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

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

Наверх




Память: 0.57 MB
Время: 0.044 c
15-1174223869
eXPell
2007-03-18 16:17
2007.04.15
Функция?!...


15-1173176067
Knight
2007-03-06 13:14
2007.04.15
Какие есть способы купить квартиру?


11-1155318437
VoofT
2006-08-11 21:47
2007.04.15
Как изменить размер PBitmap


5-1151662140
Shuric
2006-06-30 14:09
2007.04.15
ReadComponent


11-1155826986
Psychedelic
2006-08-17 19:03
2007.04.15
Изменить размер bitmap