![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
FortMax |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 2.10.2006 Где: Россия, г. Бироби джан ЕАО Репутация: нет Всего: 5 |
Кто-нибудь может на пальцах обьяснить что такое связанные списки ???
![]() -------------------- ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
FortMax |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 2.10.2006 Где: Россия, г. Бироби джан ЕАО Репутация: нет Всего: 5 |
zim22, это-то понятно, а вот как и для чего их применять ???
-------------------- ![]() |
|||
|
||||
GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
FortMax, тебе их применять не надо
|
|||
|
||||
FortMax |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 2.10.2006 Где: Россия, г. Бироби джан ЕАО Репутация: нет Всего: 5 |
-------------------- ![]() |
|||
|
||||
Static |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 6.11.2008 Репутация: нет Всего: 2 |
имеется в виду, что если б было надо - вопрос стоял бы по-другому
![]() Например - а как сделать ОТАК? А в ответ - используй связный список ![]() --------------------
Я не настолько безнадежен, как кажется... |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
это динамическая структура данных. она испольуется тогда, когда необходима. если она вам не нужна - не заморачивайтесь ![]() |
|||
|
||||
FortMax |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 2.10.2006 Где: Россия, г. Бироби джан ЕАО Репутация: нет Всего: 5 |
я просто пока теорию штудирую=) вот на них и наткнулся, но так муторно написано, хотелось просто узнать когда и как их используют
![]() Добавлено через 1 минуту и 19 секунд ладно пока не буду -------------------- ![]() |
|||
|
||||
andrew_121 |
|
|||
![]() Кодофей ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3448 Регистрация: 3.1.2008 Репутация: 10 Всего: 33 |
-------------------- Удалил аккаунт. Прощайте! |
|||
|
||||
afanp |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 25.11.2008 Репутация: нет Всего: нет |
FortMax, это такая фигня для хранения данных. и все данные связаны между собой одним или двумя узлами ( ну это все грубо говоря ) эх, помню долго врубался в эти указатели. если что спрашивай )
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
FortMax, есть несколько типов контейнеров:
vector - динамический массив list - двусвязный список и др. вектор - простейший массив, размеры которого могут меняться во время выполнения программы. Все значения хранятся в непрерывном участке памяти в порядке заполнения (т.е. это аналог обычному выделению памяти через new[], только с автоматическим управлением памятью). Время доступа к каждому элементу постоянно (не зависит от размера массива и номера элемента). Добавление/вставка/удаление не с конца могут быть довольно продолжительными. Все эти операции могут вызвать инвалидацию итераторов (т.е. сделают их не валидными). лист (список) - это двусвязный список, доступ к случайному элементу которого занимает линейное время (зависит от номера элемента), вставка/удаление элементов - константна. Любая такая операция не приводит к инвалидации итераторов (кроме того, который указывал на удаляемый элемент). В простейшем виде, он делается путем добавления в структуру, описывающую элемент списка, указателей prev и next, которые указывают на предыдущий и следующий элемент списка соответственно. |
|||
|
||||
Cheloveck |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1578 Регистрация: 26.7.2008 Где: Тула Репутация: 5 Всего: 32 |
Напугали человека, теперь он будет связные списки всячески избегать.
На самом деле если разобраться, то это абсолютно просто. Есть минимум два класса (хотя, можно обойтись и одним, но это сложнее и запутаннее), первый класс имеет указатель на объект второго класса и называется головным. Второй класс, в нашем случае (довольно упрощённом), является телом. В нём находится указатель на объект того же класса. Когда мы добавляем к списку новый объект, мы сообщаем об этом головному классу. Тот смотрит, если в его указатель уже что-то записано, то он делегирует размещение нового элемента этому объекту (иначе новый элемент заносится в этот указатель). Объект проверяет свой указатель и если он пуст, присваивает ему адрес нового элемента, если нет - передаёт дальше. Преимуществом такого подхода является манипулирование группой объектов из головного класса и наличие только одного указателя. Недостатком - время выполнения, чтобы получить доступ к определённому объекту, нужно найти его какой-либо идентификатор (конечно нужно позаботится о его создании заранее) перебирая по порядку все объекты.
нельзя применять контейнеры не зная, что они делают... имхо Это сообщение отредактировал(а) Cheloveck - 6.4.2009, 16:18 -------------------- ![]() |
|||
|
||||
Slammer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 29.3.2006 Репутация: 1 Всего: 1 |
Всем привет. Решил не создавать новую тему, потому что тоже начал учить связной список, поскольку надо выполнить задачку:
Сделать односторонний связной список, в который вводим целые числа. И к ней функцию, которая выкидывает из списка те элементы, за которыми идут парные числа. Можно попросить пдправить ошибки в этом коде, чтобы хотябы компилятор не ругался?(( Спасибо!
|
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
не ругается.
|
|||
|
||||
FortMax |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 2.10.2006 Где: Россия, г. Бироби джан ЕАО Репутация: нет Всего: 5 |
![]() -------------------- ![]() |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
FortMax, ?
|
|||
|
||||
Slammer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 29.3.2006 Репутация: 1 Всего: 1 |
Спасибо zim22.
Есть ещё один вопросик косательно функции. Ф-я должна выбросить все те элементы из списка, за которыми идут парные числа. Вродебы написал логически правильно, но она не работает .. ? хелп
|
|||
|
||||
zim22 |
|
||||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
вы здесь проверяете число на чётность или не чётность. и в зависимости от этого уже удаляете его или нет. по крайней мере пытаетесь ![]()
мой вам совет: используйте универсальный алгоритм. |
||||
|
|||||
Slammer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 29.3.2006 Репутация: 1 Всего: 1 |
Спасибки. Немного подравил, но всёравно где-то допустил ошибку, или в удаление или в печати. Поможете найти?
В приложении показан ввод и нправильный вывод (должны быть 2 двойки) Зарание признателен.
Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Slammer, а отлаживать пробовал? Пройдись по шагам.
|
|||
|
||||
Dov |
|
|||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
|||
|
||||
yeputons |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 1.4.2009 Где: Санкт-Петербург Репутация: 2 Всего: 5 |
FortMax
Связные списки удобно применять для такой задачи, которая регулярно (по крайней мере, у меня) возникает: есть массив, в который хотелось бы научиться быстро добавлять/удалять элементы и перебирать все элементы. Если реализовывать это через обычные массивы/vector, то при добавлении элемента в начало требуется сдвигать все остальные элементы на 1. Это требуется около N операций, где N - старая длина массива. Если же решать эту задачу с двухсвязными списками, то удаление/добавление элемента из такого списка происходит за ~3 операции. Экономия времени очевидна))) Если же не важно время выполнения (например добавляешь/удаляешь элемент один или два раза) - то используй vector - с ним гораздо удобнее и проще. Это сообщение отредактировал(а) yeputons - 19.4.2009, 21:49 |
|||
|
||||
zim22 |
|
|||
![]() depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
FortMax |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 485 Регистрация: 2.10.2006 Где: Россия, г. Бироби джан ЕАО Репутация: нет Всего: 5 |
спс, всем, примерное представление сформировалось
![]() -------------------- ![]() |
|||
|
||||
Slammer |
|
||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 29.3.2006 Репутация: 1 Всего: 1 |
Dov, это очень мило и я бы даже сказал красиво. Мешок картошки за вложеный труд.. но я больше половины не понял..
![]()
![]() Опять прошу подправить мой код функции nodeDel. Которая должна удалять те элементы из списка, за которыми идут парные числа, я просто не могу найти ошибку, хоть и кажется что всё правильно. :-( пример список с элементами - 1(первый), 1, 2, 2(четвёртый) должен преоброзоватся в 1(первый), 2(четвёртый->во второй) пожалуйста, обьясните как можно проще. Спасибо всем!
|
||||
|
|||||
bsa |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Slammer, ну и чего ты не понял? Все элементарно:
А по поводу кода своего, ну кто тебе мешает воспользоваться отладчиком? Он позволяет пройтись по программе шаг за шагом наблюдая все изменения переменных. |
||||
|
|||||
Dov |
|
||||
![]() аСинизатор ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1721 Регистрация: 10.5.2003 Где: Эрец-Исраэль Репутация: 11 Всего: 88 |
Подправляю, если тебе это поможет..
вызываешь в main так:
-------------------- Тут вечности запах томительный, И свежие фрукты дешевые, А климат у нас – изумительный, И только соседи – #уевые. Игорь Губерман. |
||||
|
|||||
Slammer |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 29.3.2006 Репутация: 1 Всего: 1 |
Dov
![]() Отладчик.. некогда им не пользовался (оно и видно), сейчас смотрю.. Всем спасибо ![]() |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |