Форум программистов, компьютерный форум CyberForum.ru

Связные списки в С++.Не понял ничего - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.86
VD17
 Аватар для VD17
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 17
17.03.2013, 13:53     Связные списки в С++.Не понял ничего #1
Здравствуйте люди помогите пажалуйсто понять как работают связные списки.Я учусь по книге C++ для чайников.С начало все гладко усваивал.Сейчас застрял очень сильно на связных списках C++.Искал везде(попадались очень сложные примеры и объяснения)
,уже отчаялся.Если кто объяснит поподробней для чайников, начиная с односвязных списков(желательно без конструкторов и деструкторов), буду благодарен.Знаю :
1. Премудрости объявления переменных
2. Выполнение математических операций
3. Выполнение логических операций
4. Операторы управления программой
5. Создание функций
6. Хранение последовательностей в массивах
7. Первое знакомство с указателями
8. Второе знакомство с указателями
9. Отладка программ
10. Знакомство с объектно ориентированнымпрогрммированием
11. Классы C++
12. Работа с классами
13. Указатели на объекты
Непонял например :
"(Стефан Девис C++ Для чайников)Чтобы увидеть как связные списки работаю на практике,рассмотрим следующую функцию, которая добавляет переданный ей аргумент в начало списка"
C++
1
2
3
4
5
void addHead(LinkableClass* pLC)
{
    pLc->Next = pHead
    pHead = pLC;
}
Допустим функции addHead передали объект, и что дальше?Что такое pHead откуда его взяли,посему после втрой строки заголовок указывает на первый элемент(не потому же,что переменную pHead зовут ).Не понял этот пример вообще(про остальные и говорить не стоит).И если приведете свои примеры, буду бесконечно благодарен!

Добавлено через 7 минут
И еще соответствующую литературу для чайников(желательно новую совпадающую со стандартами с++).А то по этой книге трудно очень учиться.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.03.2013, 13:53     Связные списки в С++.Не понял ничего
Посмотрите здесь:

Связные списки C++
C++ Связные списки
C++ Связные списки
Связные списки C++
C++ Связные списки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Why so seriouS
 Аватар для Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
17.03.2013, 13:56     Связные списки в С++.Не понял ничего #2
Вот здесь есть хорошие статьи по структурам данных, как раз для новичков:
http://khpi-iip.mipk.kharkiv.edu/lib...gsu/oglav.html
VD17
 Аватар для VD17
0 / 0 / 0
Регистрация: 06.02.2013
Сообщений: 17
17.03.2013, 17:46  [ТС]     Связные списки в С++.Не понял ничего #3
Зачем указатель LinkableClass* pNext; указывает на следующий элемент, не потому же что его pNext зовут .

Добавлено через 3 часа 48 минут
Спасибо.Но все равно не понял.
SummerRain
 Аватар для SummerRain
325 / 324 / 17
Регистрация: 16.12.2012
Сообщений: 544
17.03.2013, 18:14     Связные списки в С++.Не понял ничего #4
pHead - указатель типа LinkableClass*. Он указывает на первый элемент списка. (Можно назвать по-другому, например pBegin).
Функция addHead(LinkableClass* pLC) принимает указатель на объект типа LinkableClass и добавляет его в начало списка. Не забываем, что указатель на начальный объект списка хранится в pHead.
И так в этом классе имеется член pNext, который указывает на следующий элемент списка.
Так вот, чтобы засунуть объект pLC в начало списка, нам надо, чтобы этот объект своим членом pNext указывал на тот объект, который был первым до вызова функции addHead, т.е. pHead.
Поэтому записываем:
pLc->Next = pHead;
Ну и теперь заставляем указатель pHead указывать на наш новый элемент:
pHead = pLC;
И так: мы сделали это!
Astroz
1 / 1 / 1
Регистрация: 07.11.2014
Сообщений: 36
19.03.2015, 18:48     Связные списки в С++.Не понял ничего #5
Просьба не бить ногами но) у нас есть головной указатель который принимает адрес, который содержится в первом элементе, который так же является указателем.Но у нас имеется поле-указатель в классе, который содержит адрес. Поэтому получается сам объект так же должен быть указателем или же он указатель для того чтобы итератор мог проходить по списку? То есть блок памяти выделяется под список, но он по сути остается безымянный?
bogdan_017
 Аватар для bogdan_017
21 / 21 / 11
Регистрация: 18.03.2014
Сообщений: 147
19.03.2015, 22:41     Связные списки в С++.Не понял ничего #6
VD17, все очень просто. В функцию ты передаешь указатель на созданный элемент. На входе в функцию у тебя есть указатель первый элемент списка, как поле класса (он же pHead, причем по умолчанию должен на нолик указывать, если список пустой), и созданный элемент, указатель на который был передан в качестве параметра (см. аттач 1.).

Далее по двум строчкам кода делаем связь между указателями, Next на Head и Head на элемент. (см. аттач 2.)

Далее если захочешь добавить еще один указатели переприсвоятся и получится что-то типо ...(см. аттач 3.). Еще раз, и указатели переприсваиваются по аналогичному принципу (см. аттач 4). Условно, это типо как паровозик, где связи указателей абстрактно являются цепями, соединяющими вагоны, а добавляешь ты как раз эти самые вагончики. Аналогично и двусвязный список, только там две связи между вагонами

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

P.S. может с абстрактным паровозиком понятнее будет у нас в универе когда препод такой пример привел, ни у кого вопросов по спискам не было Удачи в грызении гранита программирования
Миниатюры
Связные списки в С++.Не понял ничего   Связные списки в С++.Не понял ничего   Связные списки в С++.Не понял ничего  

Связные списки в С++.Не понял ничего  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2015, 22:49     Связные списки в С++.Не понял ничего
Еще ссылки по теме:

Связные списки C++
C++ Связные списки
объясните задачу, ничего не понял C++

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4839 / 2978 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
19.03.2015, 22:49     Связные списки в С++.Не понял ничего #7
Astroz, bogdan_017, вообще-то прошло два года и два дня с момента публикации темы...
Yandex
Объявления
19.03.2015, 22:49     Связные списки в С++.Не понял ничего
Ответ Создать тему
Опции темы

Текущее время: 05:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru